본문 바로가기

Algorithm/DP(Dynamic Programing)

(C++) - 백준(BOJ) 2748번 : 피보나치 수 2

반응형
https://www.acmicpc.net/problem/2748
 

2748번: 피보나치 수 2

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

www.acmicpc.net

대표적인 dp문제였습니다.

 

 

Code

1. Top down dp

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll fibo[91], n;
ll dp(int num){
    if(num == 1 || num == 2) return 1;
    ll &ret = fibo[num];
    if(ret) return ret;
    ret = 0;
    return ret = dp(num - 1) + dp(num - 2);
}

int main(){
    cin >> n;
    cout << dp(n);
}

 

2. bottom up dp

#include <iostream>
using namespace std;
int main(){
int num;
cin >> num; //방 개수
long long *arr = new long long[num+1];
if(num == 0 ||num == 1)
{
cout<< num;
return 0;
}
arr[0] = 0;
arr[1] = 1;
for(int i = 2; i<=num; i++)
{
arr[i] = arr[i-2] + arr[i-1];
}
cout<<arr[num];
}