For Programmer

8-1. DP(다이나믹동적계획법) 개요 본문

코팅테스트/코딩테스트 이론 정리

8-1. DP(다이나믹동적계획법) 개요

유지광이 2021. 8. 19. 12:32
728x90

DP의 대표적인 예 : 피보나치 수열

피보나치 수열 단순 재귀 코드

#피보나치 함수를 재귀함수로 구현
def fibo(x):
    if x ==1 or x==2:
        return 1
    return fibo(x-1) + fibo(x-2)

print(fibo(6))
8

탑다운 소스 코드(메모이제이션)

#한 번 계산된 결과를 메모이제이션하기 위한 리스트 초기화
d = [0] * 100

#피보나치 함수를 재귀함수로 구현(탑다운 DP)
def fibo(x):
    #종료 조건(1혹은 2일때 1을 반환)
    if x == 1 or x ==2:
        return 1
    #이미 계산한 적 있는 문제라면 그대로 반환
    if d[x] != 0:
        return d[x]
    #아직 계산하지 않은 문제라면 점화식에 따라서 피보나치 결과 반환
    d[x] = fibo(x-1) + fibo(x-2)
    return d[x]

print(fibo(5))
5

바텀업 소스코드

#앞서 계산된 결과를 저장하기 위한 DP테이블 초기화
d = [0] * 100

#첫 번째 피보나치 수와 두 번째 피보나치 수는 1
d[1] =1
d[2] =1
n =99

#피보나치 함수 반복문으로 구현(바텀업 DP)
for i in range(3,n+1):
    d[i] = d[i-1] + d[i-2]

print(d[n])
218922995834555169026

탑다운 방식에서의 메모이제이션 동작 분석

728x90

'코팅테스트 > 코딩테스트 이론 정리' 카테고리의 다른 글

8-2. DP(다이나믹동적계획법) 문제2  (0) 2021.08.20
8-2. DP(다이나믹동적계획법) 문제  (0) 2021.08.19
7-2. 이진탐색 문제  (0) 2021.08.18
7. 이진탐색  (0) 2021.08.18
6-2. 정렬 문제  (0) 2021.08.18
Comments