-문제:https://www.acmicpc.net/problem/1149

-정답 풀이: 

그동안 풀어본 dp문제는 i에서 i+1로 가는 방향이 아니라 i번째가 i-1번째 와 i-2번째로부터 들어오는 방향으로 생각하는 풀이가 많았다. 그래서 i번째 집이 있을 때 그것의 열에 따라 그 열을 제외한 열 중에 최솟값을 누적해 가는 방법으로 풀었더니 정답이 나왔다 

 

처음에 min를 data로 했을때 틀렸는데,

min(data[i-1][1],data[i-1][2])

이는 dp에 그동안의 합을 누적해야 하므로 min에 data가 아닌 dp를 써야한다 

min(dp[i-1][1],dp[i-1][2])

 

첫번째 풀었을 때는 엄청 어려웠는데, 2번째 푸니까 풀만하다 

n=int(input())
data=[]
for _ in range(n):
    data.append(list(map(int,input().split())))
dp=[[0]*3 for _ in range(n)]
dp[0][0],dp[0][1],dp[0][2]=data[0][0],data[0][1],data[0][2]

for i in range(1,n):
    dp[i][0]=data[i][0]+min(dp[i-1][1],dp[i-1][2])
    dp[i][1]=data[i][1]+min(dp[i-1][0],dp[i-1][2])
    dp[i][2]=data[i][2]+min(dp[i-1][1],dp[i-1][0])
    
print(min(dp[n-1]))

+ Recent posts