코딩 코딩 코오딩 2021. 7. 27. 13:36

 

N = int(input())
RGB = []

for _ in range(N):
    RGB.append(list(map(int, input().split())))


for i in range(1,len(RGB)):

    RGB[i][0] = min(RGB[i-1][1],RGB[i-1][2])+RGB[i][0]
    RGB[i][1] = min(RGB[i-1][0],RGB[i-1][2])+RGB[i][1]
    RGB[i][2] = min(RGB[i-1][0],RGB[i-1][1])+RGB[i][2]

print(min(RGB[N-1][0],RGB[N-1][1],RGB[N-1][2]))

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

 

1149번: RGB거리

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

www.acmicpc.net

 

이 문제는 문제의 이해가 어려웠다.

 

이문제의 핵심은 이전 rgb 값만 생각하면 된다는 것이다.

 

이전의 것과 지금의 것에서 가장 작은 값들만 생각하면 된다.

 

약간 도장깨기 식으로 하나씩 가장 작은 값들만 고려해서 하면 된다.

 

 

n= int(input())
RGB = []

for i in range(n):
    RGB.append(list(map(int,input().split())))

dp =[[0]*3 for i in range(n)]
dp[0][0]= RGB[0][0]
dp[0][1]= RGB[0][1]
dp[0][2]= RGB[0][2]
for i in range(1,n):
    dp[i][0] = min(dp[i-1][1],dp[i-1][2]) + RGB[i][0]
    dp[i][1] = min(dp[i-1][0],dp[i-1][2]) + RGB[i][1]
    dp[i][2] = min(dp[i-1][0],dp[i-1][1]) + RGB[i][2]

print(min(dp[n-1]))

이거 다시 풀어봤는데 아이디어

 

현재 i 번째 집은 전의 집에만 영향을 준다 전의 집에 작은 값을 선택해서 값을 정해주면 되는 문제이다

반응형