A. 새
$N$이 $0$이 될 때 까지 $k$씩 빼주면 됩니다. 뺀 횟수가 답이 됩니다.
1 |
|
B. 3단 초콜릿 아이스크림
rev, tail 함수를 직접 만들어서 문제에서 요구하는 사항에 맞게 구현하면 됩니다.
1 |
|
C. 썸 팰린드롬
먼저 $9$만을 이용해서 합이 최대한 $N$에 가까워지게끔 합니다. 이때 필요한 $9$의 개수는 $\left\lfloor \dfrac{N}{18} \right\rfloor \times 2$으로 구할 수 있습니다. 그렇다면 나머지는 $N \bmod 18$이 되고, 이를 채우기 위한 최소 숫자의 개수를 구해주면 됩니다.
만약 한자리 수인 경우 숫자는 하나만 있어도 됩니다. 두 자리 수인 경우 적어도 두 개의 숫자가 필요한데, 홀수라면 숫자가 하나 더 필요합니다.
1 |
|
D. 완전 이진 트리
후위 순회를 통해 트리를 복구하면 됩니다.
1 |
|
E. 조건에 맞는 정수의 개수
길이가 $i$이고 마지막 숫자가 $j$로 끝나는 조건에 맞는 정수의 개수를 $dp[i][j]$로 둔 뒤 구해주면 됩니다.
1 |
|
F. 알고리즘 수업 - 선택 정렬 4
먼저 우선순위 큐에 배열의 모든 원소를 넣습니다. 제일 큰 원소부터 하나씩 꺼내서 last와 교환하는 것을 반복하면 됩니다. 이때 각 원소들의 인덱스를 따로 저장해둬야 교환이 가능한데, 좌표 압축 후 인덱스로 관리하거나 맵을 사용하면 됩니다.
꼭 우선순위 큐를 사용할 필요는 없고, 매번 최댓값을 찾는 데 $O(\log N)$ 정도면 됩니다. 예를 들면 배열을 복사한 뒤 정렬해서 맨 뒤 부터 접근해도 됩니다.
1 |
|
G. MST 게임
크루스칼 알고리즘의 원리를 이용해 간선의 가중치가 가장 작은 것 부터 고려하면 됩니다. 스택의 top이 가장 가중치가 작도록 정렬한 다음 하나씩 꺼내보면서 최소 스패닝 트리를 만들면 됩니다.
1 |
|
H. 나눌 수 있는 부분 수열
수열의 $1$번째 항 부터 $i$번째 항까지의 합을 $S_i$라 합시다. $S_i \equiv 0 \pmod d$ 혹은 $j < i$에 대하여 $S_i \equiv S_j \pmod d$인 경우를 찾으면 됩니다. 후자의 경우 $j < i$인 $S_j \bmod d$의 개수를 세 주는 것으로 빠르게 구할 수 있습니다.
1 |
|