습관처럼

백준 1003 - 피보나치 함수 본문

Algorithms/BOJ

백준 1003 - 피보나치 함수

dev.wookii 2020. 4. 5. 19:48

https://www.acmicpc.net/problem/1003

 

1003번: 피보나치 함수

각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.

www.acmicpc.net

문제 풀이


 

피보나치 3번째를 호출하면 다음과 같은 일이 일어난다. 이때 피보나치 3번째는 피보나치 2번째 1번째를 호출하는 식의 재귀형식으로 호출이 진행될때 최종으로 만들어지는 0과 1의 개수를 구하는 문제이다.

 

 

접근 방법


처음 접근 방법은 피보나치 수열 N번째를 재귀를 통해 분해하는 방법을 사용했으나 시간초과가 발생했다. 

다음 방법은 0, 1의 개수 또한 피보나치 수열을 만족하기 때문에 0번째, 1번째의 0, 1의 개수를 설정하고 피보나치 함수를 이용했다. 

 

 

코드 


#include <iostream>
#include <cstdlib>
using namespace std;
int testcase;
int num1[41],num0[41];
int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);cout.tie(NULL);
    cin>>testcase;
    num0[0]=1;num1[0]=0;
    num0[1]=0;num1[1]=1;
    while(testcase--){
        int n;cin>>n;
        for(int i=2;i<=n;i++){
            num0[i]=num0[i-1]+num0[i-2];
            num1[i]=num1[i-1]+num1[i-2];
        }
        cout<<num0[n]<<" "<<num1[n]<<"\n";
    }
    return 0;    
}

funny algorithm 0.0!

'Algorithms > BOJ' 카테고리의 다른 글

백준 10809 - 알파벳 찾기  (0) 2020.04.08
백준 11654 - 아스키 코드  (0) 2020.04.05
백준 9663 - N Queen  (0) 2020.04.03
백준 10026 - 적록색약  (0) 2020.04.02
백준 1654 - 랜선 자르기  (0) 2020.04.01