백준/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]))