소피it블로그
[이코테] 개미 전사 문제 풀이 (파이썬) 본문
문제, 풀이 출처: https://youtu.be/5Lu34WIx2Us
이 문제 역시 1) 최적의 부분 구조와 2) 중복되는 부분 문제라는 조건을 만족시키기 때문에 다이나믹 프로그래밍으로 접근하여 풀 수 있다.
핵심은, 한 칸 이상씩 떨어진 식량 창고를 털어야 하기 때문에 마지막 n번째 식량 창고에 대하여 1) i - 1 번째 식량 창고까지의 최적의 해 2) i - 2 번째 식량 창고까지의 최적의 해 + i번째 식량 창고에 저장된 식량 둘 중 더 큰 값을 선택하면 된다는 것. 그리고 각각은 부분 문제로 반복된다는 점을 파악하는 게 중요하다.
i번째 창고까지의 최적의 해를 Ai라고 하고, i번째 창고에 있는 식량의 양을 Ki라고 한다면 다음과 같은 점화식이 성립한다.
Ai = max(Ai-1, Ai-2 + Ki)
n = int(input())
k = list(map(int, input().split()))
# 바텀 업 방식으로 DP 테이블 초기화
d = [0] * 100
# 여기서는 원래대로 인덱스 0부터로 생각하면 됨
d[0] = k[0]
d[1] = max(k[0], k[1])
for i in range(2, n):
d[i] = max(d[i - 1], d[i - 2] + k[i])
print(d[n - 1])
'CS > 알고리즘 문제풀이' 카테고리의 다른 글
[이코테] 효율적인 화폐 구성 문제 풀이 (파이썬) (0) | 2022.10.02 |
---|---|
[백준] 11053번 가장 긴 증가하는 부분 수열 문제 풀이 (파이썬) (1) | 2022.10.02 |
[LeetCode] 2번 Add Two Numbers 문제 풀이 (파이썬) (0) | 2022.09.29 |
[LeetCode] 733번 Flood Fill 문제 풀이 (파이썬) (0) | 2022.09.22 |
[LeetCode] 94번 Binary Tree Inorder Traversal 문제 풀이 (파이썬) (0) | 2022.09.22 |