문제 : https://www.acmicpc.net/problem/1932

이 문제는 위 사진과 같이 크기가 N인 정수 삼각형을 입력받아,
맨 위층부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때
이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램이다.
import sys
input = sys.stdin.readline
N = int(input()) # 삼각형의 크기
A = []
# 정수 삼각형 입력받기
for i in range(N):
arr = list(map(int, input().split()))
A.append(arr)
# 합배열 삼각형 만들기
for i in range(1, N):
A[i][0] += A[i-1][0] # 왼쪽 끝값 부모값 더하기
A[i][-1] += A[i-1][-1] # 오른쪽 끝값 부모 값 더하기
for j in range(1, i):
A[i][j] += max(A[i-1][j], A[i-1][j-1]) # 부모값 중 큰 값 더하기
print(max(A[-1])) # 최장 경로 print
[문제풀이]
가장 최장 경로를 구하려면 모든 경로를 탐색해서 가장 최장 경로를 구해야 한다.
그를 구하기 위해서 합배열 삼각형을 만든다.

자식이 선택할 수 있는 부모의 값은 2개, 그 중 가장 큰 부모의 값을 더한다.
그럼 최종적으로는 가장 큰 경로 n개가 맨 밑의 노드에 저장되게 된다.

그럼 그 중 가장 큰 값을 선택하면, 최장 경로가 된다.
'코딩테스트 > 백준' 카테고리의 다른 글
| [백준] 11726번 : 2×n 타일링 (Python) (2) | 2024.05.16 |
|---|---|
| [백준] 1309번 : 동물원 (Python) (1) | 2024.05.16 |
| [백준] 1149번 : RGB거리 (Python) (3) | 2024.05.16 |
| [백준] 9095번 : 1, 2, 3 더하기 (Python) (1) | 2024.05.16 |
| [백준] 1003번 : 피보나치 함수 (Python) (5) | 2024.05.16 |