-문제: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]))
'백준 > DP' 카테고리의 다른 글
[dp/백준] 11053: 가장 긴 증가하는 수열 (0) | 2022.06.02 |
---|---|
[dp/백준] 2579번: 계단 오르기 (0) | 2022.06.02 |
[dp/백준] 11726번: 2xn 타일링(2차) (0) | 2022.06.01 |
[dp/백준] 9095번: 1,2,3 더하기(2차) (0) | 2022.06.01 |
[dp/백준] 1003번: 피보나치 함수(2차) (0) | 2022.05.30 |