728x90
https://www.acmicpc.net/problem/1149
DP문제!!
i 번째까지 칠했을 때 최소 가격 = (i-1) 번째까지 칠한 가격 + i 칠한 가격
=> d[i] = d[i-1] + i번째 최솟값 으로 생각할 수 있다.
하지만!!
이전을 R로 칠했을 때, G로 칠했을 때, B로 칠했을 때 최솟값이 각각 다르므로 세가지 경우를 각각 나눠서 생각해 준 후, 그것들끼리 최솟값을 찾아주어야 한다.
즉,
R로 칠한 경우 : d[i][0] = min(d[i-1][2], d[i-1][2]) + color[i][0]
G로 칠한 경우 : d[i][1] = min(d[i-1][0], d[i-1][2]) + color[i][1]
B로 칠한 경우 : d[i][2] = min(d[i-1][0], d[i-1][1]) + color[i][2]
로 생각해주어야 한다.
import sys
input = sys.stdin.readline
N = int(input())
rgb = []
for _ in range(N):
rgb.append(list(map(int, input().split())))
dp = [[0] * 3 for _ in range(N + 1)]
dp[0][0] = rgb[0][0]
dp[0][1] = rgb[0][1]
dp[0][2] = rgb[0][2]
for i in range(1, N):
dp[i][0] = min(dp[i - 1][1], dp[i - 1][2]) + rgb[i][0] # RED
dp[i][1] = min(dp[i - 1][0], dp[i - 1][2]) + rgb[i][1] # GREEN
dp[i][2] = min(dp[i - 1][0], dp[i - 1][1]) + rgb[i][2] # BLUE
print(min(dp[N - 1]))
728x90