알고리즘 스터디
[프로그래머스] 동적계획법 2. 정수 삼각형
cme10575
2021. 6. 20. 15:46
문제
풀이
1. 각 노드까지의 최댓값을 저장
2. 맨 아래 줄까지 반복
3. 맨 아래 줄 중 가장 큰 값 반환
def solution(triangle):
for i in range(len(triangle) - 1):
for j in range(len(triangle[i+1])):
if j == 0: # 각 줄의 첫 번째 노드인 경우 오른쪽 부모의 값만 더함
triangle[i+1][j] = triangle[i][j] + triangle[i+1][j]
continue;
if j == len(triangle[i+1]) - 1: # 각 줄의 마지막 노드인 경우 왼쪽 부모의 값만 더함
triangle[i+1][j] = triangle[i][j-1] + triangle[i+1][j]
continue;
#중간 노드인 경우 왼쪽 부모와 오른쪽 부모의 값 중 큰 값과 자기 자신을 더한 값을 저장
triangle[i+1][j] = max(triangle[i][j-1], triangle[i][j]) + triangle[i+1][j]
#마지막 줄에서 가장 큰 값을 반환
return max(triangle[len(triangle)-1])
간만에 검색 없이 풀었다. 뿌듯ㅎ
다른 사람의 풀이
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])])
???!?
해석불가
그렇다고 한다....