백준 17404 - RGB거리 2 (Python)

Updated:

색마다 가장 최솟값을 골라 더해주면 됩니다.

핵심 코드

for j in range(1, n):
        dp[j][0] = a[j][0] + min(dp[j - 1][1], dp[j - 1][2])
        dp[j][1] = a[j][1] + min(dp[j - 1][0], dp[j - 1][2])
        dp[j][2] = a[j][2] + min(dp[j - 1][1], dp[j - 1][0])

전체 코드

import sys

input = sys.stdin.readline

n = int(input())
a = [list(map(int, input().split())) for _ in range(n)]
INF = float('inf')
answer = INF

for i in range(3):
    dp = [[INF, INF, INF] for _ in range(n)]
    dp[0][i] = a[0][i]
    
    for j in range(1, n):
        dp[j][0] = a[j][0] + min(dp[j - 1][1], dp[j - 1][2])
        dp[j][1] = a[j][1] + min(dp[j - 1][0], dp[j - 1][2])
        dp[j][2] = a[j][2] + min(dp[j - 1][1], dp[j - 1][0])

    for j in range(3):
        if i != j:
            answer = min(answer, dp[-1][j])
            
print(answer)