컴퓨터공학

[알고리즘/기초] 피보나치 수

TaeGyeong Lee 2023. 8. 5. 17:01

알고리즘의 기초 이론 중 하나인 피보나치 수에 대하여 간단하게 기록한 글입니다.

 

정의

피보나치 수는 첫째 항, 둘째 항이 1이고 N번째 항이(N>=2) 직전 두 항의 합을 값으로 가지는 수열입니다.

 

1. 연습 문제

기본적인 피보나치 수 관련 문제입니다. 

 

2747번: 피보나치 수

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

www.acmicpc.net

 

1-1. 방법 (시간 초과)

재귀적인 방식으로 솔루션을 작성할 수 있습니다. 허나 이 방식으로는 연습 문제를 해결할 수 없습니다. 연습 문제의 시간 제한이 1초이기 때문입니다.

#include<iostream>
using namespace std;

int fib(int idx){
    if(idx==0) { return 0; }
    else if(idx==1) { return 1; }
    
    return fib(idx-1) + fib(idx-2);
}

int main(){
    int N, answer;
    cin >> N;
    
    answer = fib(N);
    cout << answer;
    
    return 0;
}

 

1-2. 방법

배열을 하나 만들어 반복문을 활용하여 연습 문제를 풀 수 있습니다.

#include<iostream>
using namespace std;

int fib[46] = {0, };

int main(){
    int N;
    cin >> N;
    
    fib[1] = 1;
    for(int i=2; i<= N; i++){
        fib[i] = fib[i-1] + fib[i-2];
    }
    
    cout << fib[N];
    
    return 0;
}

 

2. 연습 문제

첫 번째 연습 문제와 달리 분할 정복을 알고 있어야 해결할 수 있는 문제입니다.

 

11444번: 피보나치 수 6

첫째 줄에 n이 주어진다. n은 1,000,000,000,000,000,000보다 작거나 같은 자연수이다.

www.acmicpc.net

 

출처

 

피보나치 수 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 피보나치 수를 이용한 사각형 채우기 수학에서 피보나치 수(영어: Fibonacci numbers)는 첫째 및 둘째 항이 1이며 그 뒤의 모든 항은 바로 앞 두 항의 합인 수열이다.

ko.wikipedia.org