맨 처음엔 greedy라고 생각해서 문제파악을 잘못했다. 결국 dp연습겸 dp로 최종코드를 완성했다. 핵심은 아래서부터 더해서 올라올 것. 계속 위에서부터 더하는 방식으로도 짤 순 있다.
n = int(input())
layer = [0]*n
layer = [list(map(int, input().split())) for _ in range(n)]
for i in range(n-2, -1, -1):
for j in range(i+1):
layer[i][j] += max(layer[i+1][j], layer[i+1][j+1])
print(layer[0][0])
프로그래머스는 다른 풀이도 제공하기 때문에 다른 사람 풀이도 봤다.
그 중 눈에 띄는 방법
solution = lambda t, l = []: max(l) if not t else solution(t[1:], [max(x,y)+z for x,y,z in zip([0]+l, l+[0], t[0])])
완전 파이서닉하게 작성된 코드다! 확실히 초보자가 읽기엔 쉽지 않지만 이렇게도 작성할 수 있다는 게 놀랍다.