본문 바로가기
알고리즘/BOJ

[Python] 백준 17404번: RGB거리 2

by PIAI 2021. 10. 7.

 

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

 

17404번: RGB거리 2

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

www.acmicpc.net

1. 각 집의 색깔마다 더할 수 있는 최솟값을 더해나간다.(이전 집과 같은 색은 안됨)

2. 마지막 집과 첫번째 집의 색깔은 달라야 한다. 

3. 처음집 색깔을 미리 정해두고 dp를 구해 나가면 된다.

INF = 2147000000
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]
    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)

'알고리즘 > BOJ' 카테고리의 다른 글

[Python] 백준 2688번: 줄어들지 않아  (0) 2021.10.13
[Python] 백준 1958번: LCS 3  (0) 2021.10.07
[Python] 백준 4811번: 알약  (0) 2021.10.07
[Python] 백준 2056번: 작업  (0) 2021.10.06
[Python] 백준 20040번: 사이클 게임  (0) 2021.10.06

댓글