링크 : https://www.acmicpc.net/problem/1149
1149번: RGB거리
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나
www.acmicpc.net
- 문제
- 소요시간: 30분 실패
- 설계하기(접근방법)
1. 입력받기
rgb 배열을 입력받는다
2. 구현하기
그 다음 항의 최소합은
그 이전에 자기 자신 색깔을 제외한
나머지 두 색깔의 최소값 중 하나와 더한 값이다
이 것을 일반화 시키면
rgb[i][0] += min(rgb[i-1][1], rgb[i-1][2]) 와 같은 형태가 나온다
3. 출력하기
n-1 항의 최소값을 출력한다
- 코드(출력)
import sys
input = sys.stdin.readline
n = int(input())
rgb = [0 for _ in range(n)]
for i in range(n):
rgb[i] = list(map(int,input().split()))
for i in range(1 , n):
rgb[i][0] += min(rgb[i-1][1], rgb[i-1][2])
rgb[i][1] += min(rgb[i-1][0], rgb[i-1][2])
rgb[i][2] += min(rgb[i-1][0], rgb[i-1][1])
print(min(rgb[n - 1]))
- 얻어갈 부분
1. 역순으로 생각해보면 쉽게 떠올릴 수 있는 문제였지만, 일반화에 어려움을 겪었다
'알고리즘(백준) > 동적 계획법' 카테고리의 다른 글
[알고리즘/DP] 2293번 : 동전 1 - python (0) | 2024.02.09 |
---|---|
[알고리즘/DP] 1932번 : 정수 삼각형 - python (1) | 2024.02.07 |
[알고리즘/동적 계획법] 17070번 : 파이프 옮기기 1 - python (0) | 2024.02.05 |
[알고리즘/동적 계획법] 21317번 : 징검다리 건너기 - python (0) | 2023.04.14 |
[알고리즘/동적 계획법] 11660 번 : 구간 합 구하기 5 - python (0) | 2023.04.11 |