목차

정수 삼각형

ps
링크programmers.co.kr/…
출처프로그래머스
문제 번호43105
문제명정수 삼각형
레벨Level 3
분류

동적 계획법

시간복잡도O(n^2)
인풋사이즈n<=500
사용한 언어Python
해결날짜2021/06/25
태그

고득점 Kit - 동적계획법

풀이

코드

코드 1 - 꼭짓점에서 아래로 내려오는 경로를 계산

"""Solution code for "Programmers 43105. 정수 삼각형".

- Problem link: https://programmers.co.kr/learn/courses/30/lessons/43105
- Solution link: http://www.teferi.net/ps/problems/programmers/43105
"""


def solution(triangle):
    dp_cur = []
    for i, triangle_row in enumerate(triangle):
        dp_cur, dp_prev = [], dp_cur
        for j, num in enumerate(triangle_row):
            if j == 0:
                dp_cur.append(dp_prev[j] + num)
            elif j < i - 1:
                dp_cur.append(max(dp_prev[j - 1], dp_prev[j]) + num)
            else:
                dp_cur.append(dp_prev[j - 1] + num)
    return max(dp_cur)

코드 2 - 바닥에서 위로 올라가는 경로를 계산

"""Solution code for "Programmers 43105. 정수 삼각형".

- Problem link: https://programmers.co.kr/learn/courses/30/lessons/43105
- Solution link: http://www.teferi.net/ps/problems/programmers/43105
"""


def solution(triangle):
    dp_cur = [0] * (len(triangle) + 1)
    for triangle_row in reversed(triangle):
        dp_prev = dp_cur
        dp_cur = [cur + max(sum_left, sum_right)
                  for cur, sum_left, sum_right
                  in zip(triangle_row, dp_prev, dp_prev[1:])]
    return dp_cur[0]