https://www.acmicpc.net/problem/1149
풀이 아이디어
동적 계획법(DP, Dynamic Programming) 알고리즘으로 해결한다.
각 집의 Red, Green, Blue 으로 색칠하는 비용이 주어졌을 때, 각 집을 칠할 때의 최소 비용을 계산한다. 이때 DP table을 이용해서 이전 집까지의 최소 비용을 가지고 현재 집을 칠할 때의 최소 비용을 구한다.
풀이👀
'현재 위치(i번째 집)에 대해서 전 후가 다른 색깔의 집이어야 한다.'는 조건이 걸려있다. 쉽게 풀어 설명하면 '연속해서 같은 색을 칠하지 말라'는 조건이다.
1. 첫 번째 집부터 마지막 집까지 반복하면서, 이전 까지의 최솟값으로 현재 집을 색칠할 때 최소 비용을 계산한다.
코드🐱👓
N = int(input())
RGB = [list(map(int, input().split())) for _ in range(N)]
INF = 1e5
dp = [[INF]*3 for _ in range(N)]
# 첫 번째 집을 칠하는 비용은 주어진 값과 같다.
dp[0] = RGB[0]
# Dynamic Programming을 이용하여 최소 비용을 계산한다.
for i in range(N-1):
for j in range(3):
# 현재 집을 빨강, 초록, 파랑 중 하나로 칠했을 때의 최소 비용을 계산한다.
# 이전 집의 색깔과 다른 색으로 칠하는 것이므로 (j+1)%3, (j+2)%3을 사용한다.
dp[i+1][j] = min(dp[i+1][j], dp[i][(j+1)%3] + RGB[i+1][j], dp[i][(j+2)%3] + RGB[i+1][j])
print(min(dp[-1]))
유사한 유형의 문제
'문제 풀이 > 백준' 카테고리의 다른 글
[G5] 백준 11729 - 하노이 탑 이동 순서 (Python3) (0) | 2024.05.04 |
---|---|
[S1] 백준 2156 - 포도주 시식 (Python3) (0) | 2024.04.28 |
[S1] 백준 1932 - 정수 삼각형 (Python3) (0) | 2024.04.27 |
[G3] 백준 11779 - 최소비용 구하기 2 (Python3) (2) | 2023.12.16 |
[G4] 백준 1504 - 특정한 최단 경로 (Python3) (2) | 2023.12.16 |
댓글