알고리즘(백준)/동적 계획법

[알고리즘/DP] 1932번 : 정수 삼각형 - python

되다 2024. 2. 7. 22:03

링크 : https://www.acmicpc.net/problem/1932

 

1932번: 정수 삼각형

첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.

www.acmicpc.net

 


  • 문제
  • 소요시간: 15분 25초


  • 설계하기(접근방법) 

1. 입력받기

삼각형 배열을 입력받는다

 

2. 구현하기

다음 항은

이전 항의 같은 열과

이전 행의 이전 열 중

최대값을 더하면 된다

 

dp[i][j] += max(dp[i -1][j - 1], dp[i - 1][j])

 

그리고 배열의 시작이나 끝일때만 예외처리를 해주면 된다

 

 

3. 출력하기

 

 


  • 코드(출력)
n = int(input())

dp = [0 for _ in range(n)]

for i in range(n):
    dp[i] = list(map(int, input().split()))

dp[1][0] += dp[0][0]
dp[1][1] += dp[0][0]

for i in range(2, n):
    for j in range(i + 1):
        if j == 0:
            dp[i][j] += dp[i -1][j]
        elif j == i :
            dp[i][j] += dp[i -1][j - 1]
        else:        
            dp[i][j] += max(dp[i -1][j - 1], dp[i - 1][j])

print(max(dp[n-1]))

  • 얻어갈 부분

1. 오랜만에 dp를 풀면서 감각을 익히고 있다. dp의 유형들을 잘 외워두자