코딩테스트/BOJ

[백준][DP] 17404. RGB거리 2

박소민 2023. 12. 2. 13:52
17404. RGB거리 2
 

17404번: RGB거리 2

첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나

www.acmicpc.net

 

  • 내 풀이
    • 첫번째 값이 정해졌을때 2번째 값이 첫번째값을 제외한 값들로 확정되어야 함
      • 지정한 값만 확정 값 복사해넣고,  나머지 값들을 INF로 넣어주면 자동으로 날라감
      • 마지막 값은 첫번째 값이 아닌 값 두개를 비교해서 작은 값으로 넣어주기 
INF= float('inf')
n = int(input())
rgb = []
ans = INF
for _ in range(n):
    rgb.append(list(map(int, input().split())))

for i in range(3):
    dp = [[INF, INF, INF] for _ in range(n)]
    dp[0][i] = rgb[0][i] #처음 색깔로 정한 것만 값을 넣어주기, 나머지는 INF
    for j in range(1, n):
        dp[j][0] = rgb[j][0] + min(dp[j-1][1], dp[j-1][2])
        dp[j][1] = rgb[j][1] + min(dp[j-1][0], dp[j-1][2])
        dp[j][2] = rgb[j][2] + min(dp[j-1][0], dp[j-1][1])

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