N = int(input())
triangle = [list(map(int, input().split())) for _ in range(N)]
# 총 N - 1번의 계산이 이루어진다.
for i in range(N - 1):
for j in range(len(triangle[i + 1])):
# 첫번쨰와 끝부분 같은 경우는 그냥 더해주면 된다.
if(j == 0):
triangle[i + 1][j] = triangle[i][j] + triangle[i + 1][j]
elif(j == len(triangle[i + 1]) - 1):
triangle[i + 1][-1] = triangle[i][-1] + triangle[i + 1][-1]
# 그렇지 않고 중간에 있는 숫자들(예를 들어 1 3 1 의 3같은 경우)은 바로 위 그룹의
# 자기 자신의 인덱스 - 1 과 자기 자신의 인덱스와의 합이 총 2개가 나오는데
# 2개 중 max를 고려하여 교체해야한다.
else:
triangle[i + 1][j] = max(triangle[i][j - 1] + triangle[i + 1][j], triangle[i][j] + triangle[i + 1][j])
print(max(triangle[-1]))
'# 코딩 문제 관련 > 파이썬' 카테고리의 다른 글
백준 1463번(python) (0) | 2019.08.10 |
---|---|
백준 2579번(python) (0) | 2019.08.10 |
백준 1149번(python) (0) | 2019.08.05 |
백준 9461번(python) (0) | 2019.08.01 |
백준 1904번(python) (2) | 2019.08.01 |