[ Contents ]
1. 문제 (링크 참조)
1149번: RGB거리
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나
www.acmicpc.net
2. 문제 풀이
옆집과 색이 같지 않도록 최소의 비용으로 색을 칠하는 문제입니다.
2022.02.12 - [Algorithm] - [Algorithm] 메모해두고 불러와서 사용하는 동적 프로그래밍(DP)
[Algorithm] 메모해두고 불러와서 사용하는 동적 프로그래밍(DP)
[ Contents ] 1. 동적 프로그래밍(Dynamic Programming, 동적계획법) 동적계획법(Dynamic programming, DP): 작은 문제들에 대한 결과를 배열(리스트)에 저장하고, 이를 이용해서 입력 크기가 더 큰 문제를 점진..
star7sss.tistory.com
i번째 집을 빨강색, 초록색, 파란색으로 칠할 경우의 수를 모두 고려해야 합니다. 1번집부터 N번째집까지 차례차례 3가지 경우로 색을 칠할 때 드는 비용을 계산하고, 비교해서 최저요금을 찾아냅니다.
3. 코드
import sys
input = sys.stdin.readline
#입력
N = int(input())
cost = []
for _ in range(N):
cost.append(list(map(int, input().split())))
#DP
for i in range(1, N):
# i번째 집을 빨강색으로 칠했을 때
cost[i][0] = min(cost[i-1][1], cost[i-1][2]) + cost[i][0]
# i번째 집을 초록색으로 칠했을 때
cost[i][1] = min(cost[i-1][0], cost[i-1][2]) + cost[i][1]
# i번째 집을 파란색으로 칠했을 때
cost[i][2] = min(cost[i-1][0], cost[i-1][1]) + cost[i][2]
print(min(cost[N-1]))
1번 집부터 N번째 집까지 반복문을 순회하며 각 경우에 대해 비용을 계산합니다.
빨강색으로 칠할 경우, 이전 집(i-1번째 집)은 파란색 혹은 초록색이어야 하며 그 중 적은 비용과 현재 집(i번째 집) 도색비용을 더합니다.
나머지 두 경우도 마찬가지로 계산한 뒤, N번째 집의 최소 비용을 구합니다.
'Algorithm' 카테고리의 다른 글
[동적계획법/DP] 백준 1932 정수 삼각형 - 파이썬(Python) (0) | 2022.04.26 |
---|---|
[동적계획법/DP] 백준 1912 연속합 - 파이썬(Python) (0) | 2022.04.25 |
[구현/수학] 백준 1402 아무래도이문제는A번난이도인것같다 - 파이썬(Python) (0) | 2022.04.23 |
[구현/수학] 백준 11816 8진수, 10진수, 16진수 - 파이썬(Python) (0) | 2022.04.22 |
[구현/수학] 백준 1252 이진수 덧셈 - 파이썬(Python) (0) | 2022.04.21 |
댓글