Skip to main content
2018
A. (STELLA)
: ac: 59 / try: 59 / submission: 106
: ( )
A. (STELLA)
• 5
5
• ( 5
)
• N 66 O(N^2)
B.
: ac: 12 / try: 39 / submission: 279
: ( )
B.
• (1,1) (r,c)
• ?
B.
• 2 N^2 2
2 * N^2
• r, c, m
• (r,c,m)
• (0,0,0) (r,c,0) (r,c,1)
B.
• ?
• (x,y,0) (x,y,1) = t
• (x,y,1) (x,y,0) = 0
• 1
• 1
B.
m=0 (일반모
드)
m=1 (변신모
드)
0 t
1출발
도착2
도착1
예제 2번
. . .
. . .
#.#
을 그래프로 나타낸
그림
B.
• N^2
• 10*(N^2)
• Dijkstra O(E*logV)
• O((N^2)*logN)
C. Acka
: ac: 4 / try: 25 / submission: 128
: (KAIST)
C. Acka
•
• f(k, l) = (N ck + l ( , c )
)
• ,
.
C. Acka
•
• c(bk)+d , c’k + (d mod k) .
• , f(bk, d) <= f(k, (d mod k))
• k l , 2 k
a f(k, l) <= f(a, l’) l’ .
• , k 2 2000000
, 2000000 .
C. Acka
•
• 2000000 :
. -> O(2000000 log log 2000000)
• k k
.
• :
• 2000000 M , O(M log log M + NM / log M)
• : , Ad-Hoc
D.
: ac: 0 / try: 4 / submission: 15
: ( )
D.
•
• A , B .
• B1, B2, …, Bi, …, Bj, …, Bk, … .
B1 Bi Bj
• , .
D.
•
•
• L .
L 0 1 2 3 4 5 6 7
가능? No No No Yes Yes Yes Yes Yes
D.
•
• L 10
•
L 0 1 2 3 4 5 6 7
가능? ? ? ? Yes ? ? ? ?
D.
•
• L 10
•
L 0 1 2 3 4 5 6 7
가능? ? No ? Yes Yes Yes Yes Yes
D.
•
• L 10
•
L 0 1 2 3 4 5 6 7
가능? No No No Yes Yes Yes Yes Yes
D.
•
• L ,
• ? !
• D[i]: i L ,
?
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 0 0 0 0 0 0 0 0
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 0 0 0 0 0 0 0 0
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 0 0 0 0 0 0 0
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 0 0 0 0
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 0 0 0 0
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1 1 0
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1 1 0
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1 1 0
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1 1 0
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1 1 0
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1 1 1
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1 1 1
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1 1 1
D.
•
• L , O(N^2)
• : O(N^2 log N)
• N 10 ,
D.
•
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1 1 0
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1 1 0
4 7 3 4 2
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1 1 0
4 7 3 4 2
D.
•
• D0 = 1
• Di+1 = Di + Ti
• Di ~ Dj 1 ,
Ti 1 Tj+1 -1
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1
T -1 0 0 0 0 0 0 0
4 7 3 4 2
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1
T -1 0 0 0 0 0 0 0
4 7 3 4 2
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1
T 0 -1 0 0 0 0 0 0
4 7 3 4 2
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1
T 0 0 -1 0 0 0 0 0
4 7 3 4 2
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1
T 0 0 -1 0 0 0 0 0
4 7 3 4 2
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1
T 0 0 -1 0 1 0 0 -1
4 7 3 4 2
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1
T 0 0 -1 0 1 0 0 -1
4 7 3 4 2
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0
T 0 0 -1 0 1 0 0 -1
4 7 3 4 2
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0
T 0 0 -1 0 1 0 0 -1
4 7 3 4 2
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1
T 0 0 -1 0 1 0 0 -1
4 7 3 4 2
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1
T 0 0 -1 0 1 0 0 -1
4 7 3 4 2
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1
T 0 0 -1 0 1 0 1 -2
4 7 3 4 2
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1
T 0 0 -1 0 1 0 1 -1
4 7 3 4 2
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1 2
T 0 0 -1 0 1 0 1 -1
4 7 3 4 2
D.
•
i 0 1 2 3 4 5 6 7 8
A 2 4 7 3 1 4 2 2
지우기 가능 불가능 불가능 불가능 가능 불가능 가능 불가능
D 1 1 1 0 0 1 1 2 1
T 0 0 -1 0 1 0 1 -1
4 7 3 4 2
D.
•
• L , O(N)
• : O(N log N)
• N ,
O(log N)
E.
: ac: 0 / try: 9 / submission: 23
: ( )
E.
문제요약: 현재 토르가 위치한 행성에서 다른 행성까지의 경로의 합이 D가 되는
행성의 개수를 구하는 문제입니다.
문제 풀이:
우선 생각할 수 있는 가장 단순한 풀이를 생각해봅시다. 현재 토르가 위치한 행성에서
경로의 합이 D가 되는 행성의 개수를 모두 구하기 위해서 DFS를 돌려주는 방식을
해봅시다. 이렇게 한다면 O(n)시간복잡도로 문제해결이 가능하지만
총 시간복잡도는 O(nQ)가 되서 더 빠른 솔루션이 필요합니다.
E.
더 빠른 솔루션을 생각해봅시다.
완전 이진 트리라는 점을 생각해보면, 트리의 높이 H 는 log(N)입니다.
노드 X의 에너지를 E[x]라고 합시다.
노드 X 에서 노드 X의 서브트리 안에 존재하는 모든 노드들까지의 경로의 합을 저장한다고 생각해봅시다.
그리고 이 경로의 합의 배열을 Dist[x]라고 합시다.
그렇다면 현재 노드 X에서 경로의 합이 D가 되는 행성의 개수를 모두 세어줍시다.
X의 부모 노드를 P라고 한다면 이제 P아래에서 경로의 합이 D-E[X] 인 행성까지의 거리를 세어주면 되는데
단, X의 서브트리는 모두 제외하고 세어주어야합니다. 어떻게 하면 좋을까요??
E.
그렇다면 이걸 어떻게 구할 수 있을까요?
현재 P노드를 3번 노드라고 하고, X노드를 7번 노드라고 해봅시다.
그렇다면 3번 노드에서 7번 노드의 서브트리를 제외하고 경로의 합을 계산하지말고
6번 노드의 서브트리안에서 경로의 합이 D-E[x]-E[p]가 되는 노드의 개수를 세어주고
3번 노드에서 7번 노드의 경로의 합이 D가 되는지도 확인해서 개수를 세어줍시다.
E.
이런 방식의 알고리즘은 각 노드의 서브트리의 사이즈를 SZ라고 한다면
log(SZ)의 시간복잡도로 저 노드들의 개수를 세어줄 수 있고 총 깊이에 비례해서 계산을 해주므로
총 시간복잡도는 log(sz)*H 가 되고 이건 log(n)*log(n)이 됩니다.
그렇다면 모든 쿼리에 대해서는 O(q *log^2(n) )의 시간복잡도를 갖습니다.
그렇다면 각 노드의 서브트리안에서의 모든 경로의 합을 어떻게 구하고 또 어떻게 정렬할 수 있을까요?
E.
현재 노드 1
1
2
4 5
3
6 7
E.
현재 노드 3
1
2
4 5
3
6 7
E.
현재 노드 7
1
2
4 5
3
6 7 서브 트리안에서의 경로의 합을 구해봅시다.
7 본인 자신의 에너지 하나만 나옵니다.
E.
현재 노드 3
1
2
4 5
3
6 7
E.
현재 노드 6
1
2
4 5
3
6 7
서브 트리안에서의 경로의 합을 구해봅시다.
6 본인 자신의 에너지 하나만 나옵니다.
E.
현재 노드 3
1
2
4 5
3
6 7
3번 노드에서는 6번 ,7번 노드의 경로의 합 배열을 갖고 있으므로
3번 노드 배열에서는 3번 노드 본인의 에너지를 하나를 추가하고
6번 노드의 배열안에 있는 원소를 3번 에너지만큼 더해서 추가해주고
7번 노드도 마찬가지로 3번 에너지만큼 더해서 추가해줍시다.
이렇게 한 추가하게 되고 다른 모든 노드에서도 마찬가지로 진행됩니다.
E.
그렇다면 각 노드에서 서브트리 사이즈를 sz라고 합시다.
그렇게 되면 경로의 합 배열을 만드는데에는 O(sz)만큼의 시간이 걸리게 되고
정렬을 하게 되면 O(sz * log(sz) ) 가 걸리고
따라서 총 시간복잡도는 O(Σsz *log(sz) ) 가 됩니다.
하지만 sz 는 n에 비례하게 되므로 총 시간복잡도는 너무 커질것 같아 보입니다.
E.
H는 트리의 깊이 입니다.
D[x] = x노드에서 자신의 서브트리 안의 리프 노드까지의 거리 + 1 이라고 해봅시다.
그렇다면 각 노드 x의 서브트리 사이즈는 2^D[x] -1 입니다.
그렇다면 D[x]가 1이 되는 개수는 2^(H -D[x]) 가 됩니다.
마찬가지로 D[x]가 2가 되는 개수는 2^(H-2)이 됩니다.
1
2
4 5
3
6 7
E.
그렇다면 D[x]가 k가 되는 노드의 개수는 2^(H-D[x])입니다.
그렇다면 모든 서브트리의 사이즈를 높이별로 구해보도록 합시다.
그렇다면 D[x]가 k가 되는 노드의 개수는 2^(H-k)이고
이러한 서브트리 사이즈는 2^(k) -1 이 됩니다.
그렇다면 각 D[x]가 k일 때의 서브트리 사이즈의 개수의 합은 O(2^H)입니다.
따라서 저희가 구하고자 한 총 시간복잡도는 O(H* 2^H) 이 되고 이걸 다시 쓰게 되면
총 사이즈의 합은 O(nlogn) 이 됩니다.
그리고 저희가 구하고자 한 총 시간복잡도는 O(nlog^2n)이 됩니다.
E.
시간 복잡도 : O( (N+ Q)* log^2(N) )
메모리 복잡도 O( N*log(N))
알고리즘 분류 : 정렬, 이진탐색, DFS
F.
: ac: 3 / try: 7 / submission: 14
: (KAIST)
F.
•
• ‘ , '
' .
F.
• 1 : DFA (Deterministic Finite Automata)
• Hint DFA !
• 2 : Dynamic Programming
• D[i][j]: (1~i DFA state j
, )
F.
•
• D[i][j]: (1~i DFA state j
, )
• Ex) D[i][1] = min(D[i-1][0] + (str[i] != ‘B’),
D[i-1][6] + (str[i] != ‘B’),
D[i-1][1] + (str[i] != ‘B’))
• D[0][0] = 1 , D[M][6] .
• : String, Automata, Dynamic Programming
• : O(M)
G.
: ac: 1 / try: 12 / submission: 51
: ( )
G.
•
• N .
• , M .
• M+1
.
G.
•
• M 0 .
• N-1 p, N
q .
• p -> (1 – p) * q + p * (1 – q)
G.
•
• p = 0.5 => (1 – p) * q + p * (1 – q) = 0.5
• q = 0.5 => (1 – p) * q + p * (1 – q) = 0.5
G.
•
• p > 0.5
• q > 0.5 => (1 – p) * q + p * (1 – q) < 0.5
• q < 0.5 => (1 – p) * q + p * (1 – q) > 0.5
• p < 0.5
• q > 0.5 => (1 – p) * q + p * (1 – q) > 0.5
• q < 0.5 => (1 – p) * q + p * (1 – q) < 0.5
G.
•
• 0.5 => SAME
• 0.5
• 0.5 => ALIVE
• 0.5 => DEAD
G.
•
• 0.5 0.5
• ,
• O(N + M)
H.
: ac: 25 / try: 48 / submission: 189
: ( )
H.
문제요약: 물건 하나를 사는 비용은 에너지와 무게의 곱으로 표현이 된다.
그리고 특정 조건하에서 최소의 비용으로 모든 부품을 사야 한다.
문제 풀이:
조건을 요약해서보면 X<Y라면, Y부품을 X부품보다 먼저 살 수는 없고
여러개의 물건을 같이 사게 된다면 에너지의 최대값 * 무게의 최대값이 비용이 됩니다.
H.
그렇다면 여러개의 부품을 한번에 같이 사고 싶다면 항상 연속한 순서의 부품을 살 수 밖에 없습니다.
그렇다면 여기서 떠올릴 수 있는 풀이법은 dp솔루션이 됩니다.
DP[i]= i-1번 부품까지 구입했을 때의 최소비용이라고 정의하고
max_W[L,R]= L번 부품부터 R번 부품까지의 최대 무게
max_E[L,R] = L번 부품부터 R번 부품까지의 최대 에너지.
DP[i]= min( DP[j] + max_W[j,i] ) ( 1<=j<=i) 의 점화식이 생성됩니다.
H.
시간복잡도 : O(N^2)
메모리복잡도 : O(N)
알고리즘 분류 : DP