https://www.acmicpc.net/problem/1932
1
부터 n
번째 줄까지 정삼각형 형태의 배열이므로 j
의 범위를 i+1
로 해서 순회
한줄씩 내려오면서 이전값과 현재값을 더했을 때의 최대값을 선택하면서 내려오면 된다.
이전 값은 현재값을 기준으로 바로 위에서 내려올 경우와 왼쪽 위에서 내려올 경우를 생각할 수 있다.
j==0
일 경우 왼쪽에서 내려오는 숫자가 없으므로 left=0
이고 그렇지 않을 경우 왼쪽위의 숫자를 left
에 넣어준다.
i=j
일 경우 오른쪽에서 내려오는 숫자가 없으므로 right=0
이고 그렇지 않을 경우 오른쪽 위의 숫자를 right
변수에 넣어준다.
현재 위치의 숫자와 더했을 때 가장 높은 숫자를 현재 위치에 저장한다
import sys
input = sys.stdin.readline
n=int(input())
maps = [list(map(int,input().split())) for _ in range(n)]
for i in range(1, n):
for j in range(i+1):
# 왼쪽 위에서 내려오는 경우
if j==0:
left = 0
else:
left = maps[i-1][j-1]
# 바로 위에서 내려오는 경우
if i==j:
right = 0
else:
right = maps[i-1][j]
maps[i][j] = maps[i][j] + max(right, left)
print(max(maps[-1]))