상세 컨텐츠

본문 제목

백준 2747 - 피보나치 수 (파이썬)

Tech/백준 단계별 문제

by 2021. 1. 9. 12:32

본문

www.acmicpc.net/problem/2747

 

2747번: 피보나치 수

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가

www.acmicpc.net

오늘은 DP의 기본인 피보나치 수를 풀어봤다.

전에 풀어봤던 건데 top-down, bottom-up의 두가지 방식으로 다시 풀어봤다.

 

Top Down

# TOP DOWN
memo = {0:0, 1:1}

def fibo(n):
    if n in memo:
        return memo[n]
    else:
        memo[n] = fibo(n-1) + fibo(n-2)
        return memo[n]
print(fibo(int(input())))

 

먼저, top-down 방식은 딕셔너리로 초기 값을 저장해놓는다.

그리고 딕셔너리에 내가 찾는 값이 있는지 확인한 후

없다면 재귀함수를 통해 딕셔너리에 그 값을 저장한다.

 

 

 

Bottom Up

#BOTTOM UP
memo = {0:0, 1:1}

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

 

bottom-up 방식도 마찬가지로 딕셔너리에 초기 값을 저장한다.

그리고 for문을 돌려서, 딕셔너리에 없는 가장 작은 값부터 그 값들을 쌓아나간다.

그러나 bottom-up 방식은 재귀함수를 쓰지 않는다.

오직 딕셔너리 값들에 의존하여 내가 원하는 값을 찾아나간다.

관련글 더보기