728x90
푸는 방법
DP(Dynamic Programming)을 이용하여 행이 증가될 때마다, 최고의 값을 구합니다.
행을 거듭해가며 더할 때마다
삼각형을 해체해서 경우를 살펴보면 다음과 같습니다.
1. 왼쪽으로만 진행하는 경우
3. 오른쪽으로 증가하는 경우
에는 단순하게 이전행의 마지막값을 더해주면 됩니다.
하지만 2번 같이 값이 겹쳐지는 경우에는 각각 더했을 때 최대가 되는 경우를 비교해 선택하면 됩니다.
코드
n = int(input())
tri = []
for _ in range(n):
tri.append(list(map(int, input().split())))
for i in range(1, n):
for j in range(i+1):
if j==0: #왼쪽 행
tri[i][j] +=tri[i-1][j]
elif j==i: #오른쪽 행
tri[i][j] +=tri[i-1][j-1]
# 값이 겹치는 경우
else: tri[i][j] = max(tri[i][j]+tri[i-1][j-1], tri[i][j]+tri[i-1][j])
print(max(tri[n-1]))
728x90
'Programming Language > 알고리즘 공부' 카테고리의 다른 글
[백준] 11057 오르막 수 파이썬 (0) | 2021.04.14 |
---|---|
[백준] 19947 투자의 귀재 배주형 파이썬 (0) | 2021.04.08 |
[백준] 19621 회의실 배정 2 파이썬 (0) | 2021.04.04 |
[백준] 14502 연구소 파이썬 (0) | 2021.03.29 |
[백준] 18429 근손실 파이썬 (0) | 2021.03.29 |