알고리즘/백준

[백준 / #1149] RGB거리 (Python)

셩윤 2023. 11. 20. 21:30

문제 설명

https://www.acmicpc.net/problem/1149

 

1149번: RGB거리

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

www.acmicpc.net

 

 


문제풀이

쉬운 DP 문제!?

연속해서 같은 색을 사용하면 안 된다는 조건만 잘 생각하면 쉽게 풀 수 있다.?

점화식은 ?dp[i]를 빨간색으로 칠하려면 DP[i-1]를 초록색으로 칠한 것과 파란색으로 칠한 것 중 더 적은 값 + 현재 칸을 빨간색으로 칠하는 값!

이렇게 현재 칸을 각각의 색깔로 칠할 수 있는 값을 다 구한 뒤 최솟값을 출력하면 된다.

N = int(input())
rgb = []

for _ in range(N):
    rgb.append(list(map(int, input().split())))

dp = list([0, 0, 0] for _ in range(1001))

dp[1][0] = rgb[0][0]
dp[1][1] = rgb[0][1]
dp[1][2] = rgb[0][2]

for i in range(2, N + 1):
    dp[i][0] = min(dp[i - 1][1], dp[i - 1][2]) + rgb[i - 1][0]
    dp[i][1] = min(dp[i - 1][0], dp[i - 1][2]) + rgb[i - 1][1]
    dp[i][2] = min(dp[i - 1][1], dp[i - 1][0]) + rgb[i - 1][2]

print(min(dp[N]))