2026 카카오그룹 신입크루 공채 코딩 테스트 2차 풀이

2026 카카오그룹 신입크루 공채 코딩 테스트 2차 풀이

November 24, 2025

1. 힌트권

문제 요약

1,2,,n(n16)1, 2, \cdots, n(n \le 16)개의 문제를 순서대로 풀어야 한다. k(k16)k(k \le 16)개의 힌트 번들이 주어지는데, 각 번들은 최대 한 번 구매할 수 있으며 (ai,pi,bi1,bi2,,biM)(a_i, p_i, b_{i1}, b_{i2}, \cdots, b_{iM})으로 구성되어 있다. aia_i번 문제를 풀고 난 후에 pip_i의 비용으로 구매할 수 있으며, 총 mm개의 힌트권이 들어있음을 의미한다. 힌트권은 어떤 문제에 대한 힌트권인지를 의미하는 정수 bjb_j로 이루어져 있다.

한 문제당 최대 n1n - 1번 힌트권을 사용할 수 있고, ii번 문제에 대해 jj번 힌트권을 사용했을 때 소모되는 비용은 cijc_{ij}이다. 모든 문제를 해결하는데 필요한 최소 비용을 구해보자.

풀이

각 번들은 최대 한 번 구매할 수 있으므로 2k2^k 경우의 수에 대해서 문제를 해결합니다. 힌트권은 사용가능한 문제가 정해져 있으므로 현재 가지고 있는 힌트권이 있다면 모두 사용하는 것이 최적해입니다.

아직 힌트권을 얻지 못한 상태인데 사용하지 않도록 유의하고, 최대 n1n - 1번 사용 가능한것에 유의합니다.

2. 채굴

문제 요약

인터랙티브 문제. a1,a2,,aN(N200,ai100000)a_1, a_2, \cdots, a_N(N \le 200, a_i \le 100\, 000)이 주어질 때, 1,2,,N1, 2, \cdots, N중 하나의 인덱스에 보물이 위치함. excavate(i)\text{excavate}(i) 를 호출하면 ii번이 보물인 경우 0, ii번보다 왼편에 보물이 있다면 -1, 오른편에 있다면 1을 반환함. 비용은 aia_i. 총 비용이 k(k20000)k (k \le 20\, 000)이 되도록 보물을 찾아보자. 호출 횟수나 비용을 최소화할 필요는 없다.

채점기는 적응적이며, kk이하의 비용으로 운에 의존하지 않고 100% 확률로 찾을 수 있는 경우만 주어짐.

풀이

프로그래머스 플랫폼이 많이 바뀐 것 같습니다. 인터랙티브 유형은 고사하고 스페셜 저지도 지원하지 않았었는데 이런 문제가 출제될거라고는 생각도 못했습니다.

3. 선인장

문제 요약

n×m(1n,m500000;n×m500000)n \times m (1 \le n, m \le 500\, 000; n \times m \le 500\, 000) 크기의 격자 위에 k(kn×m)k (k \le n \times m)개의 빗방울에 대한 일정이 주어진다. (x1,y1),(x2,y2),,(xk,yk)(x_1, y_1), (x_2, y_2), \cdots, (x_k, y_k)는 각각 ii 시각에 (xi,yi)(x_i, y_i) 칸에 빗방울이 떨어짐을 의미한다. (xi,yi)(x_i, y_i)는 서로 다르다.

h×wh \times w 크기의 부분 격자에 대해서, 격자 내에 가장 최초로 빗방울이 떨어지는 시점을 구할 수 있다. 가능한 부분 격자 중에서 이 값이 최대가 되는 부분 격자를 구해보자.

풀이

aija_{ij}(i,j)(i, j)에 빗방울이 떨어지는 시각으로 정의합니다. 빗방울이 떨어지지 않는다면 10910^9.

h=1h = 1인 경우만 가정하면 길이가 ww인 부분 수열의 최솟값에 대해서 가장 큰 값을 구하는 문제로 변합니다. 구간 최솟값은 여러 방법으로 O(k)\mathcal{O}(k)시간보다 빠르게 구할 수 있습니다.

dijd_{ij}aij,aij+1,,aij+w1a_{ij}, a_{ij + 1}, \cdots, a_{ij + w - 1}의 최솟값으로 정의한다. 이제 dijd_{ij}를 column-wise하게 순회하면서 똑같이 구간 최솟값 구해서 업데이트 합니다. 이제 dijd_{ij}(i,j)(i, j)를 왼쪽 위로 하는 h×wh \times w 크기의 부분 격자의 최솟값이 됩니다.

4. 반복 수열

문제 요약

a1,a2,,aN(N100000;1ai100 000)a_1, a_2, \cdots, a_N (N \le 100\, 000;1 \le a_i \le 100\ 000)이 주어질 때, 이를 이용해서 반복 수열 bb를 만들 수 있다. 반복 수열은 aia_i를 순서대로 aia_i번씩 반복해 나열한 수열이다.

예를 들어 a=2,1,5,3a = 2, 1, 5, 3 이라면 b=2,2,1,5,5,5,5,5,3,3,3b = 2, 2, 1, 5, 5, 5, 5, 5, 3, 3, 3이다. 단, 반복 수열의 원소 총합은 101510^{15}이하이다.

정수 l,r(l,r1015)l, r(l, r \le 10^{15})가 주어질 때, bl+bl+1++brb_l +b_{l + 1} + \cdots + b_r 를 구하고 이를 kk라고 하자. 이제 bb의 부분 배열의 합이 kk인 경우의 수도 구해보자.

풀이

a12,a22,,aN2a^2_1, a^2_2, \cdots, a^2_N을 이용하면 l,rl, r이 주어질 때 bl,brb_l, b_r이 무슨 값인지 알아낼 수 있습니다. 그리고 누적합도 알아낼 수 있고, 이를 이용해 구간 합을 구할 수 있습니다.

구간 합이 KK가 되는 경우의 수는 모르겠습니다. 두 포인터에다가 ax+by=cax + by = c 꼴의 정수 해 경우의 수 세는 방식으로 셀 수 있을 것 같습니다.

5. 철도

문제 요약

1n,m8;n×m201 \le n, m \le 8; n \times m \le 20 격자 위에서 (1,1)(1, 1)에서 시작해 (n,m)(n, m)까지 이동하는 경로의 개수.

단, 경로는 철도이다. 직선 형태, 90도 틀어진 형태, 십자로 교차하는 형태가 있을 수 있다. 격자위의 임의의 칸에 장애물이 있을 수 있다.

풀이

재방문을 허용하는 경로의 개수 세는 문제로 생각할 수 있습니다. 재방문하면 기존의 -| 모양의 철길이 + 모양으로 바뀝니다.