백준/DP
[dp/백준] 1932번: 정수 삼각형 (2차 시도)
ydin
2022. 5. 26. 18:41
-문제: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]))