본문 바로가기
알고리즘

백준 피보나치 수 2747

by kcj3054 2021. 12. 22.

문제

특징

  • 이것은 예전에 그냥 피보나치 함수를 넣어서 풀었던 문제이다. 그렇게 풀 수도 있지만 dp top-down방식으로도 가능하다

  • 시간복잡도는 solve함수에서 2개의 재귀를 돌려서 2^n이다.

소스

#include <iostream>
#include <memory.h>


using namespace std;

//dp[i] i는 i번째 피보나치수의 값
//dp[n] =do[n-1] + dp[n-2] 

int n;
int dp[200];

//시간복잡도 2^n 
int solve(int idx) {

    if (idx < 1) return 0;

    if (dp[idx] != -1) return dp[idx];

    dp[idx] = solve(idx - 1) + solve(idx - 2);

    return dp[idx];

}

int main() {

    cin >> n;

    memset(dp, -1, sizeof(dp));

    dp[1] = 1;
    dp[2] = 1;

    cout << solve(n);
    return 0;
}

'알고리즘' 카테고리의 다른 글

백준 오큰수  (1) 2021.12.25
백준 쿼드트리 (c++, recursion)  (0) 2021.12.24
백준 3190 뱀 (c++)  (0) 2021.12.20
네트워크 복구 백준 2211 (c++)  (0) 2021.12.16
길 찾기 게임 (c++)  (0) 2021.12.15