https://www.acmicpc.net/problem/1932
문제 설명:
삼각형에서 아래에 있는 수를 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램
- 전에 저장된 값을 활용하고 있다.
- 7일때 3과 8은 7을 활용하여 최댓값을 구해야한다.
- 반복적이다.
- 3은 8을 더하고/ 1을 더해 다음값을 저장한다.
- 8은 1을 더하고/ 0을 더해 다음값에 저장한다.
=> 다이나믹 프로그래밍이다.
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
풀이해설:
- i는 2차원 배열의 길이의 인덱스이다. 즉 0~n까지
- j = 0 일때 다음값은 이전에 저장된 dp[i-1][0]의 값에 현재 자기자신 dp[i][0]을 더한값이다.
- j = 0 이상일때 다음값은 이전의 j-1의 값(dp[i-1][j-1))과 이전의 j의 값(dp[i-1][j])의 값의 최댓값을 저장한다.
- j = i 와 같아지면 dp[i-1][j-1]의 값에 자기자신을 더한값이다.
import sys
input = sys.stdin.readline
n = int(input())
dp = []
for i in range(n):
dp.append(list(map(int, input().split())))
for i in range(1,n):
for j in range(0, i+1):
if j == 0:
dp[i][0] += dp[i - 1][0]
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]))
'코딩테스트 > 백준' 카테고리의 다른 글
[Python] 백준 2108번. 통계학 (1) | 2023.12.19 |
---|---|
[Python] 백준 11651번. 좌표 정렬하기 2 (0) | 2023.12.18 |
[Python] 백준 1149번. RGB거리 (1) | 2023.12.07 |
[Python] 백준 9461번. 신나는 함수 실행 (1) | 2023.12.05 |
[Python] 백준 9184번. 신나는 함수 실행 (1) | 2023.11.30 |