백준/문제풀이_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]))