study/알고리즘
[python] 백준 - 정수 삼각형(1932)
It's Hyeeun Time
2022. 5. 2. 22:59
요즘 dp를 공부하기 시작하면서
백준 문제를 풀기 시작했다.
프로그래머스에서만 문제를 풀다가
오래간만에 input부터 다시 받으려 하니
은근히 헷갈리는 부분이 많다.
여하튼 오늘은 백준의 정수 삼각형이라는
간단한 dp 문제를 들고 왔다.
https://www.acmicpc.net/problem/1932
1932번: 정수 삼각형
첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다.
www.acmicpc.net
정수 삼각형은
간단하지만 dp의 개념을 잘 보여준 문제라고 생각한다.
1. 아이디어
현재 자신의 위치를 기준으로
좌상단 우상단
데이터 중 큰 데이터를 더해가며
나올 수 있는 가장 큰 값을 구하는 문제다.
2. 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
import sys
input = sys.stdin.readline
N = int(input())
# 삼각형 데이터를 받고 값을 더해주며 확인해갈 배열
dp = [list(map(int, input().split(" "))) for _ in range(N)]
for i in range(1, N):
for j in range(len(dp[i])):
left = 0
right = 0
# 좌상단 데이터
if j-1 >= 0:
left = dp[i-1][j-1]
# 우상단 데이터
if j < len(dp[i-1]):
right = dp[i-1][j]
# 현재 삼각형 데이터 + 좌상단, 현재 삼각형 데이터 + 우상단 데이터 중 큰 값으로 업데이트
dp[i][j] = max(dp[i][j] + left, dp[i][j] + right)
print(max(dp[N-1]))
|
cs |