728x90
https://www.acmicpc.net/problem/24416
import sys
n = int(sys.stdin.readline())
def fibo(n):
if n == 1 or n == 2:
return 1
return fibo(n-1) + fibo(n-2)
def fibo_dp(n):
cnt = 0 #1
dp = [0]*41 #2
dp[1], dp[2] = 1, 1 #3
for i in range(3, n+1):
dp[i] = dp[i-1] + dp[i-2] #4
cnt += 1 #5
return cnt
print(fibo(n), fibo_dp(n))
#1 : 숫자를 세어줄 변수
#2 : dp테이블 초기화 n의 최댓값은 40이므로 41로 설정
#3 : 피보나치 수열의 점화식에 따라 1, 2를 지정
#4 : 점화식
#5 : 한번 진행할때마다 cnt +1
피보나치 수를 구할때 dp가 재귀함수보다 훨씬 빠르다는것을 알 수 있는 문제였다.
728x90
'[Coding Test] > [백준]' 카테고리의 다른 글
[백준] 1904 파이썬(python) : 01타일 - dp기초 (0) | 2022.07.14 |
---|---|
[백준] 9184 파이썬(python) : 신나는 함수 실행 (0) | 2022.07.14 |
[백준] 1520 파이썬(python) : 내리막 길 - dp+dfs (0) | 2022.07.13 |
[백준] 11053 파이썬(python) : 가장 긴 증가하는 부분 수열 - (★) (0) | 2022.07.13 |
[백준] 2156 파이썬(python) : 포도주 시식 - (★) (0) | 2022.07.13 |