알고리즘
[알고리즘] 백준 1149 - RGB거리
발등이 따뜻한 사람
2023. 12. 29. 21:58
문제
https://www.acmicpc.net/problem/1149
풀이
9달 전에도 풀었던 문제여서 그런지 그냥 보자마자 현재 집이 빨강이면 이전집 초록 블루 비용에 현재 빨강 비용을 더했을 때 더 적은 값을 저장해두고 마지막 배열에서 min인 값을 찾으면 되겠다...고 생각했다.
정답 코드
n = int(input())
minr,ming,minb = 0,0,0
for i in range(n):
r,g,b = map(int,input().split())
if i==0:
minr=r
ming=g
minb=b
else:
new_minr = min(ming+r,minb+r)
new_ming = min(minb+g,minr+g)
new_minb = min(ming+b,minr+b)
minr = new_minr
minb = new_minb
ming = new_ming
print(min(minr,minb,ming))
이렇게 짜긴했는데 사실 일반 DP처럼 2차원 배열을 저장해두고 풀어도 된다. (이게 더 정석(?)이려나)
내가 9달 전에 풀었던 풀이가 비슷한 맥락에서 풀었던 답이다.
n=int(input())
cost=[]
for i in range(n):
r=list(map(int,input().split()))
cost.append(r)
arr=[[0 for _ in range(3)] for _ in range(n+1)]
arr[1][0]=cost[0][0]
arr[1][1]=cost[0][1]
arr[1][2]=cost[0][2]
for i in range(2,n+1):
arr[i][0]=cost[i-1][0]+min(arr[i-1][1],arr[i-1][2])
arr[i][1]=cost[i-1][1]+min(arr[i-1][0],arr[i-1][2])
arr[i][2]=cost[i-1][2]+min(arr[i-1][1],arr[i-1][0])
print(min(arr[n]))