백준/문제풀이_python
1149 RGB거리 _python
휴대용치즈
2022. 10. 25. 23:28
https://www.acmicpc.net/problem/1149
1149번: RGB거리
첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나
www.acmicpc.net
문제 접근
i(2 ≤ i ≤ N-1)번 집의 색은 i-1번, i+1번 집의 색과 같지 않아야 한다.
이거 하나면 충분하다.
선택한 결과를 위아래가 중복되지않도록 해야하면, 결국 모든 경우를 탐색해야 할것같다.
하지만 결과를 계산하면서 최소값을 찾아간다면 한번만 for문을 사용해도 충분할 것이다.
"""
i번은 i-1번과 i+1번에 영향을 받는다.
i번은 i-2번과 i+2번에 영향을 받지않는다.
N번 반복하면서
R,G,B의 합들의 최소값을 구한다.
"""
풀이
from math import ceil
import sys
input = sys.stdin.readline
"""
i번은 i-1번과 i+1번에 영향을 받는다.
i번은 i-2번과 i+2번에 영향을 받지않는다.
N번 반복하면서
R,G,B의 합들의 최소값을 구한다.
"""
#입력
N = int(input())
arr = []
for i in range(N):
arr.append(list(map(int,input().split())))
#dp
for i in range(1,N):
arr[i][0] += min(arr[i-1][1], arr[i-1][2])
arr[i][1] += min(arr[i-1][0], arr[i-1][2])
arr[i][2] += min(arr[i-1][0], arr[i-1][1])
print(min(*arr[N-1]))