import sys
N = int(input()); rgb = []
for _ in range(N):
rgb.append(list(map(int, sys.stdin.readline()[:-1].split(' '))))
result = 1000*1000+1
for f in range(3):
dp = [[0, 0, 0] for _ in range(N)]; dp[0] = [1001, 1001, 1001]; dp[0][f] = rgb[0][f]
for i in range(1, N):
dp[i][0] += min(dp[i-1][1], dp[i-1][2]) + rgb[i][0]
dp[i][1] += min(dp[i-1][0], dp[i-1][2]) + rgb[i][1]
dp[i][2] += min(dp[i-1][0], dp[i-1][1]) + rgb[i][2]
dp[N-1][f] = 1000*1000+1
if min(dp[N-1]) < result: result = min(dp[N-1])
print(result)
- 1번 집의 색과 N번 집의 색이 같지 않아야 한다는 조건을 처리해줘야함
- -> for문을 3번 돌며
1번 집의 색이 빨강일 때 -> N번 집의 색은 초록 or 파랑
1번 집의 색이 초록일 때 -> N번 집의 색은 빨강 or 파랑
1번 집의 색이 파랑일 때 -> N번 집의 색은 빨강 or 초록
이 되도록 dp[N-1]에서 1번 집의 색을 주어진 조건에서의 최대값 (1000 * 1000 + 1)로 갱신시킴
또한, 1번 집의 색을 임의로 설정해주기 위해 dp[0] = [rgb[0][f], 1001, 1001]이런식으로 설정함