최종 출력(답안)을 저장할 변수 answer
를 따로 초기화한다.
input 데이터를 입력받는다.
1번 집이 R, G, B인 경우를 고려해 3번 반복하는 for문을 돈다.
3-1. 다이나믹 테이블을 초기화한다.
dy[i][j]는
0,1,2...i
까지 i번 집을 j색으로 칠했을 때의 최소 비용을 말한다.
j=0 : R
,j=1 : G
,j=2 : B
를 의미한다.
최소비용을 구해야하므로 최대값으로 초기화한다.
3-2. 1번 집에 칠할 색 비용을 dy[0]에 저장한다.
3-3. for 반복문을 이용해 다이나믹 테이블을 채운다.
3-4. N번 집까지 채웠으면 1번 집과 N번 집의 색이 동일한 경우를 제외한 최소 비용을 answer에 저장한다.
answer를 출력한다.
import sys
input = sys.stdin.readline
# 1. 필요한 변수 초기화
INF = 2147000000
answer = INF
if __name__=="__main__":
# 2. input 데이터 입력
N = int(input())
house = [list(map(int,input().split())) for _ in range(N)]
# 3. R, G, B 각각의 경우로 반복문
for i in range(3):
# 3-1. 다이나믹 테이블 초기화
dt = [[INF] * 3 for _ in range(N)]
# 3-2. 1번집에 칠할 비용을 다이나믹 테이블에 저장
dt[0][i] = house[0][i]
# 3-3. 다이나믹 테이블 채우기
for j in range(1, N):
dt[j][0] = min(dt[j-1][1], dt[j-1][2]) + house[j][0]
dt[j][1] = min(dt[j-1][0], dt[j-1][2]) + house[j][1]
dt[j][2] = min(dt[j-1][0], dt[j-1][1]) + house[j][2]
# 3-4. 1번집과 N번집 색이 동일한 경우를 제외하고 최소 비용을 answer에 저장
for k in range(3):
if i == k:
continue
else:
answer = min(answer, dt[-1][k])
print(answer)