-문제:https://www.acmicpc.net/problem/1932
-정답풀이:
이전에 풀었던 문제라서 풀이과정이 비교적 쉽게 생각이 났다.
과정
열이 0이거나 행과 같은 경우는 해당 숫자에 바로 위 숫자를 더하면 된다(여기서 열==0 인 경우와 열==행인 경우 다르게 설정해야 한다)
이외의 경우는 왼쪽, 오른쪽 위의 값 중 최댓값을 더해주면 된다
다만 indexError가 계속 발생했는데, 이는 처음에 data를 data=[[] for _ in range(n)]으로 초기화 했었다.
여기서 list를 삽입하면 3중 리스트가 되어서 계속 났던 것이다
그래서 data=[]라고 초기화한 후, 분기문에서 이전 값들을 data의 값이 아닌 dp의 값으로 대체했더니 정답이 떴다
n=int(input())
data=[]
for _ in range(n):
data.append(list(map(int,input().split())))
dp=[[0]*n for _ in range(n)]
dp[0][0]=data[0][0]
for i in range(1,n):
for j in range(0,i+1):
if j==0:
dp[i][j]= (dp[i-1][j]+data[i][j])
elif i==j:
dp[i][j]=dp[i-1][j-1]+data[i][j]
else:
dp[i][j]= data[i][j]+max(dp[i-1][j-1],dp[i-1][j])
print(max(dp[-1]))
'백준 > DP' 카테고리의 다른 글
[dp/백준] 18353번: 병사 배치하기 (0) | 2022.05.27 |
---|---|
[백준/dp] 14501번: 퇴사(2차) (0) | 2022.05.26 |
[코딩테스트] 백준 14002번: 가장 긴 증가하는 부분 수열4 (0) | 2022.01.13 |
[코딩테스트] 백준 1965번: 상자넣기 (0) | 2022.01.13 |
[코딩테스트] 백준 17070번: 파이프 옮기기1 (0) | 2022.01.13 |