STUDY/Algorithm

[백준] 1149 RGB거리

sinawi95 2021. 3. 23. 22:28
728x90

www.acmicpc.net/problem/1149

 

1149번: RGB거리

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

www.acmicpc.net

N = int(input())
total = [[0]*3 for _ in range(N + 1)]

for i in range(1, N + 1):
    x, y, z = list(map(int, input().split()))
    if i == 1:
        total[i] = [x, y, z]
    else:
        total[i][0] = min(total[i - 1][1], total[i - 1][2]) + x
        total[i][1] = min(total[i - 1][0], total[i - 1][2]) + y
        total[i][2] = min(total[i - 1][1], total[i - 1][0]) + z
print(min(total[N]))

대충 백트래킹으로 조합을짜면 할수있었는데 DP로 하려니 어떻게 해야하는지 감이 안잡혔다.

처음엔 값을 받아서 이전 자리와 다른인덱스 값중 최솟값을 넣는 식으로 짰는데, 틀린 답이 나왔다.

한시간 정도 고민했는데 안풀려서 자야하기때문에 검색해보았다.

이방식으로하면 index에는 각각 x,y,z와 이전 row값에서 가장 작은 값을 더해서 저장하게 된다.

번거롭게 index를 체크하지 않아도 되니 참으로 좋은 방법인듯하다.

'STUDY > Algorithm' 카테고리의 다른 글

[백준] 12907 동물원  (0) 2021.03.25
[백준] 16953 A->B  (0) 2021.03.25
[백준] 9461 파도반 수열  (0) 2021.03.23
[백준] 1904 01타일  (0) 2021.03.23
[백준] 9184 신나는 함수 실행  (0) 2021.03.23