알고리즘/프로그래머스
[DP] 정수 삼각형
래울
2022. 6. 23. 22:27
https://programmers.co.kr/learn/courses/30/lessons/43105?language=python3
코딩테스트 연습 - 정수 삼각형
[[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30
programmers.co.kr
예전에는 dp문제가 어려웠는데, 그렇게 어렵지도 않은 것 같다.
효율성 테스트도 한번에 통과했다.
위와 같이 삼각형의 일부분에 대해, 1을 지나가는 경우는, 3을 지나고 1을 지나는 경우와 8을 지나고 1을 지나는 경우 두가지밖에 없다.
즉 삼각형이 양 끝의 경우에 대해 if문으로 처리해주고,
그 가운데들에 대해서는 두 가지경우중 더 큰 경우를 선택하면서 삼각형테이블을 채우다보면, 맨 마지막 행중 최대값이 곧 답이 된다.
def solution(triangle):
result = [[triangle[0][0]]]
for i in range(1, len(triangle)):
temp = triangle[i][:]
for j in range(len(triangle[i])):
if j == 0:
temp[j] += result[i-1][j]
elif j == len(triangle[i-1]):
temp[j] += result[i-1][j-1]
else:
temp[j] += max(result[i-1][j], result[i-1][j-1])
result.append(temp)
return max(result[-1])