https://school.programmers.co.kr/learn/courses/30/lessons/43105
def solution(triangle):
# 아이디어
# dp를 이용
# dp는 triangle의 맨 마지막에서부터 시작 -> bottom-up
# 2번 반복문을 돌며 d[i-1][j]와 dp[i-1][j-1]을 업데이트
# 이때 j값을 검증하여 dp업데이트 실행
dp = [[0] * len(triangle) for _ in range(len(triangle))]
for i in range(len(triangle[-1])):
dp[-1][i] = triangle[-1][i]
for i in range(len(triangle)-1, 0, -1):
for j in range(len(triangle[i])):
print(i, j)
if j < len(triangle[i-1]):
dp[i-1][j] = max(dp[i][j] + triangle[i-1][j], dp[i-1][j])
if j != 0:
dp[i-1][j-1] = max(dp[i][j] + triangle[i-1][j-1], dp[i-1][j-1])
return dp[0][0]
bottom-up방식으로 풀었다.
전형적인 dp문제이지만 3단계라고 생각하기엔 매우 쉬운 난이도였다.
'알고리즘' 카테고리의 다른 글
PG) 야근지수 -lv3 (0) | 2024.07.07 |
---|---|
PG) 네트워크 - lv3 (0) | 2024.07.06 |
BOJ)괄호 추가하기 3 (0) | 2024.06.28 |
BOJ) MooTube (0) | 2024.06.27 |
백준) 합분해 - python (0) | 2024.06.25 |