from sys import stdin
num = int(stdin.readline().strip())
lst = [[int(stdin.readline().strip())] for _ in range(num)]
for i in range(1,num):
for j in range(i+1):
if j == 0:
lst[i][j] += lst[i-1][j]
elif j == i:
lst[i][j] += lst[i-1][-1]
else:
lst[i][j] += max(lst[i-1][j-1:j+1])
# print(lst[i])
print(max(lst[-1]))
약속이 점심저녁으로 잡히게 된 날이라 랜덤 문제풀이는 아니고, 어떤 식으로 풀면 되겠다고 하는 것이 바로 보이는 것을 풀게 되었다.
if
와 elif
문은 else
에서 lst
의 2번째 범위에 max
와 min
을 적절히 집어넣었을 때 6줄을 1줄로 줄이는 신박함을 쓸 수도 있지만 이경우 알아보기가 지저분해서 패스..!..
원리는 i번째 줄의 j번째 숫자에 차례대로 j == 0
일 때는 맨 왼쪽에 있는 숫자 바로 위의 숫자를 더해주는 작업을 하고, j == i
일 때는 맨 오른쪽에 있는 숫자를, 나머지(else
)는 해당 숫자의 양쪽 위 숫자중 큰 것을 더해주는 식으로 코드를 구현하고 구하는 대상이 가장 아래쪽의 최댓값이므로 max(lst[-1])
을 프린트해준 것이다.
다짐 : 일요일까지 글을 완성시켜보자!!!