자료구조와 알고리즘/개인적인 코딩테스트 관련 풀이

[동적 계획법][Top-Down] - 네트워크 선 자르기

얄루몬 2022. 8. 16. 14:54

def DFS(n):

    #메모이제이션
    if dp[n] > 0:
        return dp[n]
    if n == 1 or n == 2:
        return n
    else:
        dp[n]= DFS(n-1)+DFS(n-2)
        return dp[n]



if __name__ =="__main__":
    n = int(input())
    dp = [0] * (n+1)

    print(DFS(n))
  • Top-Down 방식은 재귀와 메모이제이션 방식을 사용해서 진행한다.
  • 재귀는 말그대로 본인을 호출하는 것을 의미하고 메모이제이션은 해당 재귀가 한 번이라도 호출되었다면 어딘가에 메모해두고 이를 다시 사용하지 않는 방식을 의미한다.
  • 위의 코드에서 if dp[n] > 0: 이 한 번 호출되었던 경우를 의미한다.