문제 설명
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]))
'알고리즘 > 백준' 카테고리의 다른 글
[백준 / #12852] 1로 만들기 2 (Python) (0) | 2023.11.21 |
---|---|
[백준 / #11659] 구간 합 구하기 4 (Python) (0) | 2023.11.21 |
[백준 / #2579] 계단 오르기 (Python) (0) | 2023.11.20 |
[백준 / #9095] 1, 2, 3 더하기 (Python) (1) | 2023.11.20 |
[백준 - #1012] 유기농 배추 (Python) (1) | 2023.11.14 |