https://www.acmicpc.net/problem/1149
dp[i][0] = R
dp[i][1] = G
dp[i][2] = B
26 | 40 | 83 |
49+min(40,83)=89 | 60+min(26,83)=86 | 57+min(26,40)=83 |
13+min(86,83)=96 | 89+min(89,83)=172 | 99+min(89,86)=185 |
dp에는 계속 최저 비용을 저장한다.
빨강으로 칠할 경우, 그전 집은 파랑이나 초록으로 칠해야 하므로 그중 더 적은 비용을 더하여 업데이트하는 방식이다.
n = int(input())
dp=[]
for i in range(n):
dp.append(list(map(int, input().split())))
for i in range(1, len(dp)):
dp[i][0] = min(dp[i - 1][1], dp[i - 1][2]) + dp[i][0]
dp[i][1] = min(dp[i - 1][0], dp[i - 1][2]) + dp[i][1]
dp[i][2] = min(dp[i - 1][0], dp[i - 1][1]) + dp[i][2]
print(min(dp[n - 1][0], dp[n - 1][1], dp[n - 1][2]))
'문제를 풀자' 카테고리의 다른 글
[백준 #1260] DFS와 BFS(Python) (1) | 2023.03.07 |
---|---|
[백준 #1463] 1로 만들기(Python) (1) | 2023.03.06 |
[프로그래머스] 영어 끝말잇기(C++) (0) | 2022.08.19 |
[프로그래머스] 두 큐 합 같게 만들기(C++) (0) | 2022.08.19 |
[프로그래머스] 예상 대진표(C++) (0) | 2022.08.18 |
댓글