

문제를 살펴보면 각 줄에서 최솟값을 찾아서 출력하는 것이 아니라 바로 옆칸과는 색깔이 겹치면 안된다는 조건이 있다
이전 문제에서 부분합을 구하는 알고리즘인 카데인-알고리즘을 배웠기 때문에 어렵지 않게 문제를 해결 가능하다
각 줄을 내려가면서 카데인 알고리즘을 통해 최솟값으로 값을 변경하면 되기 때문이다
일단 각 색깔의 비용을 for문을 통해 입력받아주고, 부분합을 구하면 된다
for _ in range(N):
color.append(list(map(int, input().split())))
서로 옆칸의 색깔과는 겹치면 안되기 때문에 빨강색은 초록색, 파란색을 더한 값 중에서 최솟값을 구해야한다
# calculate Prefix Sum
for i in range(1, N):
color[i][0] += min(color[i-1][1], color[i-1][2])
color[i][1] += min(color[i-1][0], color[i-1][2])
color[i][2] += min(color[i-1][0], color[i-1][1])
이러한 방식을 사용하면 카데인 알고리즘을 통해 간단히 해결할 수 있다
마지막줄에서 min함수를 통해 color[N-1]에 위치한 값들 중에서 최솟값을 출력하면 된다
카데인 알고리즘은 이전 글에서 다루었으니 여기서는 생략하도록 하겠다


'Baekjoon' 카테고리의 다른 글
| [Baekjoon]백준 2579 계단 오르기(실버 3) - Python (0) | 2025.01.06 |
|---|---|
| [Baekjoon]백준 1932 정수 삼각형(실버 1) - Python (0) | 2025.01.05 |
| [Baekjoon]백준 1912 연속합(실버 2) - Python # 카데인 알고리즘 (1) | 2025.01.03 |
| [Baekjoon]백준 9461 파도반 수열(실버 3) - Python (1) | 2025.01.03 |
| [Baekjoon]백준 1904 01타일(실버 3) - Python (0) | 2025.01.02 |