<내 코드>
n = int(input())
tri = [list(map(int, input().split())) for _ in range(n)]
k = 2
for i in range(1, n):
for j in range(len(tri[i])):
if j == 0: # 가장 왼쪽값일 경우 현재 값이랑 바로 위랑 더함
tri[i][j] = tri[i-1][j] + tri[i][j]
elif j == len(tri[i])-1: # 가장 오른쪽일 경우 현재 값이랑 바로 위랑 더함
tri[i][j] = tri[i-1][-1] + tri[i][j]
else: # 양 끝값이 아닌, 중간일 경우, 대각선 왼쪽과 오른쪽 중 큰 값과 더함
tri[i][j] = max(tri[i-1][j-1], tri[i-1][j]) + tri[i][j]
k += 1
print(max(tri[n-1]))
규칙을 찾아서 재귀 형태의 점화식을 찾아내는 것이 중요했다. 삼각형의 가장 왼쪽과 오른쪽 값은 위의 값과 바로 더해주면 되고, 중간의 값들은 대각선 왼쪽과 오른쪽의 값 중 최댓값과 더해줬다.
반응형
'알고리즘 문제풀기 > 백준 - Python' 카테고리의 다른 글
[백준 1931] 회의실 배정 - Python (그리디 알고리즘, 정렬) (0) | 2020.08.26 |
---|---|
[백준 1541] 잃어버린 괄호 - Python (그리디 알고리즘) (0) | 2020.08.26 |
[백준 1149] RGB 거리 - Python (다이나믹 프로그래밍) (0) | 2020.08.24 |
[백준 9461] 파도반 수열 - Python(다이나믹 프로그래밍) (0) | 2020.08.24 |
[백준 2748] 피보나치 수 - Python(다이내믹 프로그래밍) (0) | 2020.08.23 |