문제
풀이
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])])
???!?
해석불가
그렇다고 한다....
'알고리즘 스터디' 카테고리의 다른 글
[프로그래머스] 탐욕법 5. 섬 연결하기 (1) | 2021.07.10 |
---|---|
[프로그래머스] 그래프 2. 순위 (0) | 2021.07.04 |
[프로그래머스] 그래프 1. 가장 먼 노드 (0) | 2021.05.23 |
[프로그래머스] 해시 2. 디스크 컨트롤러 (1) | 2021.05.16 |
[프로그래머스] 해시 4. 베스트 앨범 (0) | 2021.05.08 |