Python_알고리즘/Silver I
1932. [Python]정수 삼각형
최근영
2024. 4. 22. 19:47
1. 문제
https://www.acmicpc.net/problem/1932
1932번: 정수 삼각형
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
www.acmicpc.net
2. 접근 방법
- 시간 제한: 2초
- 메모리 제한: 128MB
- DP(다이나믹 프로그래밍)
3. 파이썬 코드
import sys
# 많은 인풋 처리
input = sys.stdin.readline
N = int(input())
# 숫자 저장할 리스트
num_list = []
# 숫자 저장
for _ in range(N):
num_list.append(list(map(int,input().split())))
# 1 ~ N 까지 반복
for i in range(1,N):
# i+1 까지 반복
for j in range(i+1):
# 양 끝점일 경우 한 경우의 수만 더함
if j == 0:
num_list[i][j] += num_list[i-1][j]
elif j == i:
num_list[i][j] += num_list[i-1][j-1]
# 외의 경우 이전값 대각선 중 max 값 선택
else:
num_list[i][j] += max(num_list[i-1][j-1], num_list[i-1][j])
# 최종 계산된 결과에서 max 값 추출
print(max(num_list[-1]))
4. 문제를 풀고난 후 생각
- 문제 자체가 굉장히 직관적인 문제로 양 끝점을 제외한 부분에서 이전 값들의 max 값을 선택하는 방식으로 bottom-up 으로 쌓아나간다.
- DP 문제의 기본적인 능력을 확인하는 문제 같다.
5. 문제를 푸는데 도움이 되는 지식
- DP(다이나믹 프로그래밍)