알고리즘

DP(Dynamic Programing) 다이나믹 프로그래밍

peach_h 2023. 2. 14. 21:40

DP(Dynamic Programing) 다이나믹 프로그래밍

문제를 각각 작은 문제로 나누어 해결한 후, 그 해를 이용해 큰 크기의 문제들을 해결하여 최종적으로 원래 주어진 입력의 문제를 해결하는 방법

간단히 -> 작은거 부터 해결하고, 그 결과를 이용해 큰거 + 결과까지 다 해결한다

 

 

1. Bottom-Up ( 상향식 ) : 더 작은 하위 문제부터 살펴본 다음, 작은 문제의 정답을 이용해 큰 문제의 정답을 품.

-> 데이터를 테이블 형태로 만들면서 문제를 풀기 때문에 Tabulation이라고 부름 

n = int(input())
dp = [0]*(n + 1)

def fibo(n):
    dp[0] = 0
    dp[1] = 1
    for i in range(2, n + 1):
        dp[i] = dp[i - 1] + dp[i - 2]
    return dp[n]
 
print(fibo(n))

 

 

2. Top-Down ( 하향식 ) : 하위 문제에 대한 정답을 계산했는지 확인해가며 품.

-> Memoization이라 지칭 / 재귀랑 거의 동일

n = int(input())
dp = [0]*(n + 1)

def fibo(n):
    if n <= 1:
        return n
    if dp[n]:
        return dp[n]
    dp[n] = fibo(n - 1) + fibo(n - 2)
    return dp[n]

print(fibo(n))

컴퓨터 프로그램을 실행할 때 이전에 계산한 값을 메모리에 저장해서 매번 다시 계산 하지 않아 실행속도를 빠르게 하는 것이 DP의 핵심이다.

 

 

-> 이제 막 시작단계라 계속 수정하며 내용 추가할 예정