규칙을 만족하면서 모든 집을 칠하는 비용의 최솟값을 구해보자.
n: 집의 수 (2 ≤ N ≤ 1,000)
cost: 각 집을 빨강, 초록, 파랑으로 칠하는 비용 (1,000보다 작거나 같은 자연수)
total: 모든 집을 칠하는 비용의 최솟값
dp: 모든 집을 규칙에 맞게 칠하는 비용
(입력 및 선언)
(최저 비용 계산)
n = int(input())
total = float("INF")
cost = []
for _ in range(n):
cost.append(list(map(int, input().split())))
for i in range(3):
dp = [[float("INF"), float("INF"), float("INF")] for _ in range(n)]
dp[0][i] = cost[0][i]
for j in range(1, n):
dp[j][0] = cost[j][0] + min(dp[j-1][1], dp[j-1][2])
dp[j][1] = cost[j][1] + min(dp[j-1][0], dp[j-1][2])
dp[j][2] = cost[j][2] + min(dp[j-1][0], dp[j-1][1])
for j in range(3):
if i != j:
total = min(total, dp[-1][j])
print(total)
또 dp엿구나 .. 그랫구나...
처음에 첫 번째/n번째 처리를 안 한 채로 문제를 풀어서 좀 헤맸다.