본문 바로가기
  • 초부득3 - 어제보다 나은 내일을 위해
  • 꿈이 현실이 되는 날까지
sw사관학교 정글 2기/04 DP, 그리디

[DP] 백준 RGB거리 1149번 with Python3

by 금의야행 2021. 8. 30.

 

https://www.acmicpc.net/problem/1149

 

1149번: RGB거리

첫째 줄에 집의 수 N(2 ≤ N ≤ 1,000)이 주어진다. 둘째 줄부터 N개의 줄에는 각 집을 빨강, 초록, 파랑으로 칠하는 비용이 1번 집부터 한 줄에 하나씩 주어진다. 집을 칠하는 비용은 1,000보다 작거나

www.acmicpc.net

 

문제

정답 풀이

n = int(input())
p = []
for i in range(n):
    p.append(list(map(int, input().split())))

# 0,1,2 는 각각 빨강, 초록, 파랑을 뜻함.
for i in range(1, len(p)):
    p[i][0] = min(p[i - 1][1], p[i - 1][2]) + p[i][0]
    p[i][1] = min(p[i - 1][0], p[i - 1][2]) + p[i][1]
    p[i][2] = min(p[i - 1][0], p[i - 1][1]) + p[i][2]

# index 번호상 n-1이여야 리스트의 가장 끝 element
print(min(p[n - 1][0], p[n - 1][1], p[n - 1][2]))

출처:https://pacific-ocean.tistory.com/147

 

해석

아직까지도 dp 문제를 풀때 필요한 사고 방식을 갖추지 못했다. 자꾸 0에서 시작해서 앞으로 나아가는 식의 코드만 구상하게 되는데 대부분의 dp문제의 경우 이전 값을 활용하게 되기에 좀 더 사고를 유연하게 해야한다.

댓글