def solution(triangle):
k = 2
for i in range(1,len(triangle)):
for j in range(k):
if j == 0:
triangle[i][j] = triangle[i][j] + triangle[i-1][j]
elif j == i:
triangle[i][j] = triangle[i][j] + triangle[i-1][j-1]
else:
triangle[i][j] = triangle[i][j] + max(triangle[i-1][j],triangle[i-1][j-1])
k += 1
return max(triangle[-1])
이 문제는 그냥 풀이법을 외웠다.
triangle 이중리스트가 피라미드 형태인 것을 보면서 인덱스 1번부터 시작하여 반복문을 돌린다. 두 번째 인덱스부터 행의 원소는 2개 이므로 k= 2부터 시작하여 다음 triangle의 행으로 갈때마다 k에 +1을 해준다.
그 후 for문을 이용하여 k만큼 돌리며 j가 맨 앞과 맨 뒤일때는 바로 이 전의 위에 있는 원소를 더해준다.
이 코드가
if j == 0:
triangle[i][j] = triangle[i][j] + triangle[i-1][j]
elif j == i:
triangle[i][j] = triangle[i][j] + triangle[i-1][j-1]
j가 맨 앞과 맨 뒤가 아니라면 위에 있는 2개의 원소 중에서 max인 것을 더해준다.
else:
triangle[i][j] = triangle[i][j] + max(triangle[i-1][j],triangle[i-1][j-1])
그리고 triangle리스트의 마지막 행에서 max값을 반환한다.