카테고리 없음

[코딩테스트] 동적계획법(DP)

공기반 코딩반 2023. 9. 3. 15:22
반응형

DP(Dynamic Programming)란?

문제에 대한 정답이 될 가능성이 있는 모든 해결책을 “체계적”이고 “효율적”으로 탐색하는 풀이법

 

 

-  완전 탐색의 경우 시간 복잡도(계속 함수를 두 개씩 호출함) : O(2^n)

ex) 피보나치 수열을 재귀함수로 풀 때   

return fibo(n - 1) + fibo(n - 2)

 

Q. fibo(1), fibo(2) 등 하위 문제들이 fibo(8), fibo(7) 계산할 때 계속 해서 중첩해서 계산됨

→ 동적 프로그래밍(DP) 이용

하위문제 여러 개로 나눈 후 메모리에 계산 값을 넣어 향후 상위 문제에서 계산 하지 않고 꺼내 씀

시간 복잡도가 O(2^n) → O(n)으로 감소

Top-Down 방식

memo = {}

def fibo(n):
    if n == 1 or n == 2:
        return 1
    if n not in memo:
        memo[n] = fibo(n - 1) + fibo(n - 2)
    return memo[n]

= 상위 문제 f(n) 부터 하위문제 f(1)로 접근

- Memoziation : Top-Down방식에서 메모리를 채워 나가는 것

 

 

 

Bottom-Up 방식

memo = {}

def fibo(n):
    for i in range(3, n + 1):
        memo[i] = memo[i - 1] + memo[i - 2]
    return memo[n]

 

= 하위문제 f(1)부터 상위 문제 f(n) 접근

- Tabulation  :  Bottom-Up 에서 memo를 채워나가는 것 

반응형