나의 풀이
def solution(triangle):
d = triangle[:]
for i in range(1, len(d)) :
for j in range(0,i+1) :
if j == 0 :
d[i][j] += d[i-1][j]
elif j == i :
d[i][j] += d[i-1][i-1]
else :
d[i][j] += max(d[i-1][j-1], d[i-1][j])
return max(d[len(d)-1])
전형적인 bottom up 동적프로그래밍 문제이다.
dp[] 에는항상 dp[i][j] 까지의 최댓값 경로가 저장되어 있다.
따라서 dp[i][j] 를 구하려면, dp[i-1][j-1] 와 dp[i-1][j] 둘 중 더 큰값을 나의 값에 더해주면 된다.
만약 한 줄에서 첫번째 값(j=0)이라면, 항상 dp[i-1][0] 에서만 이어지며,
마지막 값(j=i)이라면, 항상 dp[i-1][i-1] 에서만 이어진다.
삼각형의 바닥부분은 각자의 경로로 왔을 때의 최댓값들의 모음이 되게 된다.
이 중 가장 큰 값을 리턴하면 된다.
'알고리즘 > 동적프로그래밍(DP)' 카테고리의 다른 글
[프로그래머스] 도둑질 - 파이썬(python) (0) | 2022.09.19 |
---|---|
[프로그래머스] 등굣길 - 파이썬(python) (0) | 2022.09.19 |
[프로그래머스] N으로 표현 - 파이썬(python) (0) | 2022.09.17 |
[Python] 백준 11052번: 카드 구매하기 풀이 (0) | 2021.02.04 |
[Python] 백준 2011번: 암호코드 풀이 (0) | 2021.02.04 |
댓글