https://www.acmicpc.net/problem/1149
import sys
input = sys.stdin.readline
N = int(input())
costs = []
for i in range(N):
costs.append(list(map(int, input().split())))
for i in range(1, N):
costs[i][0] = min(costs[i-1][1], costs[i-1][2]) + costs[i][0]
costs[i][1] = min(costs[i-1][0], costs[i-1][2]) + costs[i][1]
costs[i][2] = min(costs[i-1][0], costs[i-1][1]) + costs[i][2]
print(min(costs[N-1][0], costs[N-1][1], costs[N-1][2]))
N개의 집을 칠하는 방법의 최소 비용을 구하는 것이다.
그래서 2번째 집부터 첫번째 집의 비용에 더하가면 되니까 for문을 1부터 수행한 것이다.
i번째 집의 0번째 색을 칠하는 비용은 i-1번째의 1번째, 2번째 색을 칠하는 비용에 원래 i번째 집의 0번째 색을 칠하는 비용을 더해가면 된다.
이렇게 계속 수행하면 된다.
728x90
'파이썬 알고리즘 문제 풀이' 카테고리의 다른 글
[백준] S3. boj2108 / 분류: 수학, 정렬 (0) | 2024.05.01 |
---|---|
[백준] S1. boj3187 양치기 꿍 / 분류: bfs (1) | 2024.05.01 |
[백준] S4. boj2839번 설탕 배달 /분류 : 다이나믹 프로그래밍 (1) | 2024.04.01 |
[백준] G5. boj7569 토마토 / 분류 : bfs (2) | 2024.04.01 |
[프로그래머스] Lv2. 소수 찾기 파이썬 / 분류 : 완전 탐색 (1) | 2024.03.31 |