본문 바로가기
백준 풀이

[백준/BOJ] - 1149번 python 풀이 - DP

by 반오십 코린이 2022. 12. 29.
728x90


Key Point

1. 1번째 집은 비교 대상이 없으므로 입력받은 그대로 저장.

2. 2번째 집부터 바로 앞 집과 비교하여 색을 고를 수 있으므로 앞 집의 색 중 cost가 낮은 값을 d 배열에 넣어준다.

3. 집집 마다 경우의 수는 R, G, B 총 3가지 색을 칠할 경우이므로 각 경우 마다 누적 cost가 얼마나 드는지 저장하는 알고리즘 


import sys
input = sys.stdin.readline
n = int(input())

d = [list(map(int, input().split())) for _ in range(n)]

 # 0번째 idx(1번째 집)는 확인x 1번째 idx(2번째 집)부터 최적의 값을 해당 배열에 갱신
for i in range(1, n):
    #0번째 idx인 1번째 집은 입력 그대로 냅둔다.
    #1번째 idx인 2번째 집부터 빨,초,파 순으로 값을 지정해준다.
    #지정하는 알고리즘은 이전에 저장된 d값 중 R이 아닌 G, B에 해당하는 cost들의 최솟값을 기준으로 정한다.
    d[i][0] += min(d[i-1][1], d[i-1][2])
    #지정하는 알고리즘은 이전에 저장된 d값 중 G이 아닌 R, B에 해당하는 cost들의 최솟값을 기준으로 정한다.
    d[i][1] += min(d[i-1][0], d[i-1][2])
    #지정하는 알고리즘은 이전에 저장된 d값 중 B이 아닌 R, G에 해당하는 cost들의 최솟값을 기준으로 정한다.
    d[i][2] += min(d[i-1][0], d[i-1][1])
print(min(d[n-1]))
728x90