[백준] 1149번

코린이·2022년 5월 19일
0

백준

목록 보기
30/38

📢 1149번 문제

백준 문제 링크

🔎 풀이

사용 언어 : python

cost는 각 집의 빨강, 초록, 파랑으로 칠하는 비용이 들어가있다.
i번 집의 색은 i-1번, i+1번 집의 색과 달라야 하므로 for을 사용하여
i에서 빨강색을 선택했으면 i-1번 집에서 빨강이 아닌 색 중 최솟값을 더하여 cost[i][0]에 저장한다.
i에서 초록을 선택하였을 때 역시 마찬가지로 i-1번 집에서 초록이 아닌 색 중 최소값을 더하여 cost[i][1]에 저장한다.
i에서 파랑을 선택하였을 경우는 최소비용은 cost[i][2]에 저장이 된다.

결국 cost[i]에는
[ i번째에 빨강색일 경우 최소 비용 , 초록색일 경우 최소 비용 , 파랑색일 경우 최소 비용 ] 이 저장된다.

예시)
입력 :
3
26 40 83
49 60 57
13 89 99


cost 출력 :
[[26, 40, 83], [89, 86, 83], [96, 172, 185]]

최종적으로 cost[n-1]값 중 가장 작은 값을 출력하면 된다.

🔎 코드

import sys

n = int(sys.stdin.readline())
cost = [list(map(int, sys.stdin.readline().split())) for _ in range(n)]

for i in range(1, n):
    cost[i][0] = min(cost[i-1][1], cost[i-1][2]) + cost[i][0]
    cost[i][1] = min(cost[i-1][0], cost[i-1][2]) + cost[i][1]
    cost[i][2] = min(cost[i-1][0], cost[i-1][1]) + cost[i][2]

print(min(cost[n-1]))
profile
초보 개발자

0개의 댓글