본문 바로가기
문제 풀이/이것이 코딩 테스트다

[이것이 코딩 테스트다] 개미 전사 - 다이나믹 프로그래밍

by JJong | 쫑 2023. 9. 30.

'이것이 코딩 테스트다' 책에 수록 되어 있는 실전 문제이다. 문제의 자세한 내용은 책을 참고하도록 하자.

 

책에서 나오는 점화식은 문제 설명을 해주며 결국 아래와 같은 점화식을 만든다.

$$a_i = max(a_{i-1}, a_{i-2}+k_i)$$

 

하지만 나는 다른 방법으로 점화식을 찾았다. 하지만 이 점화식이 옳은 점화식인지 확인이 어렵다는 것이다.

$$d_i = k_i + max(d_{i-2}, d_{i-3}), (i>3)$$

*단, $d_1 = k_1$,    $d_2 = k_2$,    $d_3 = k_3 + d_1$ 이다.

N = int(input())
K = list(map(int, input().split()))

dp = [0] * N
dp[:2] = K[:2]

ans = 0
for i in range(2, N):
    dp[i] = (d:=K[i] + max(dp[i-2], dp[i-3]))
    ans = max(d, ans)

print(ans)

 

댓글