삼각형 규칙을 따라 자신까지의 합을 저장하며 DP 탐색
알고리즘: Dynamic Programing
import sys
input = sys.stdin.readline
n = int(input())
g = [list(map(int, input().split())) for i in range(n)]
for i in range(1, n):
g[i][0] += g[i - 1][0] # 해당 행의 첫번째 요소는 전 행의 첫번째 요소만 더할 수 있음
g[i][i] += g[i - 1][i - 1] # 해당 행의 마지막 요소는 전 행의 마지막 요소만 더할 수 있음
for j in range(1, i): # 그 외는 전 행의 j or j - 1 인덱스 중 큰 값을 합산
g[i][j] += max(g[i - 1][j], g[i - 1][j - 1])
print(max(g[-1])) # 최종 행에서 더해진 가장 큰 값 출력
이번 문제는 삼각형의 왼쪽 대각선과 아래쪽 대각선으로만 내려올 수 있다는 조건을 통해 합을 더해 나가면 되는 문제였다
첫번째 요소와 마지막 요소는 각각 전행의 왼쪽 대각선, 오른쪽 대각선 밖에 받지 못하므로 그 값을 그대로 더하면 되지만,
가운데 있는 요소들은 양쪽에서 내려올 수 있기 때문에 값을 비교하여 메모이제이션 해야 한다