For Programmer

백준 1149번 파이썬 문제풀이(RGB거리) - DP(탑다운) 본문

코팅테스트/백준 문제 모음

백준 1149번 파이썬 문제풀이(RGB거리) - DP(탑다운)

유지광이 2022. 4. 7. 22:07
728x90


사실 dp문제들 보면 바텀업으로 접근하기 위해 점화식 찾기가 여간 쉬운일이 아니다. 그래서 무조건적으로 탑다운으로 재귀로 짤려고 노력을 많이한다. 다음 코드도 재귀코드이며 잘 분석해보길 바란다.

 

import sys

sys.setrecursionlimit(50000)

N = int(input())
homes = [[0, 0, 0]] + [list(map(int, input().split())) for _ in range(N)]

dp = [[1 << 30] * 3 for _ in range(N + 1)]


def recur(row, col):
    if row == N + 1:
        return 0

    if dp[row][col] != 1 << 30:
        return dp[row][col]

    for i in range(3):
        if row >= 1 and i == col:  # 1행이상부터 다음 열이 현재의 열과 같다면 재귀x
            continue
        dp[row][col] = min(dp[row][col], recur(row + 1, i) + homes[row][col])

    return dp[row][col]


print(recur(0, 0))

-> 한 재귀안에서 한번에 돌아서 계산하기 위해 homes의 첫번째 행에 [0,0,0] 을 추가했다.

728x90
Comments