출처: 백준 1149번 RGB거리
집을 색칠하는 데 있어서, 다른 것은 고려하지 않아도 되고 앞뒷 집의 색깔들과만 다르면 된다.
먼저, 3개의 색깔을 칠하는 경우의 비용을 계속해서 저장해나가는 리스트를 설계하면 된다.
그리고 지금 색칠하는 색깔의 비용과 다른 2개의 색깔 중 지금까지 더해진 비용이 작은 값을 골라 비용을 합산한 뒤 리스트에 각각 저장한다.
Ex) 지금 빨강을 칠한다면, 이전 집이 파랑 또는 초록으로 칠해진 경우의 비용 중 작은 값을 골라 합산한다.
마지막으로, N 번째 집까지 색칠한 값 3개를 비교하여 최솟값을 출력하면 된다.
N = int(input())
dp = [list(map(int,input().split()))]
for i in range(N-1):
a,b,c = map(int,input().split())
temp1 = a+min(dp[i][1],dp[i][2])
temp2 = b+min(dp[i][0],dp[i][2])
temp3 = c+min(dp[i][0],dp[i][1])
dp.append([temp1,temp2,temp3])
print(min(dp[N-1]))