티스토리 뷰

반응형

백준 1003번 문제. 피보나치



[Point] 문제 예제에 주어진 코드를 잘 활용하여 fib(1)과 fib(0)이 나올 때 카운트만 잘 해주면 된다.



쉬운 문제.

예제로 주어진 코드를 조금 수정하면 된다.



*변수 설명*

cnt_0 : fib(0)이 몇 번 나오는지

cnt_1 : fib(1)이 몇 번 나오는지

T : 테스트 케이스 

N : 입력 



*알고리즘 설명*

재귀함수 int fib(int n) 을 이용하여 n이 1과 0일 때는 카운트 횟수를 증가시켜주고 

그 외의 경우에는 fib(n-1)과 fib(n-2)를 호출해주면 된다. 

그림을 그려보면 이진트리처럼 내려가게 됨. 

별 다른 설명은 더 필요 없을듯하다. 




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
 
int cnt_0,cnt_1;
void fib(int n){
    if(n==0){
        cnt_0++;
    }
    else if(n==1){
        cnt_1++;
    }
    else{
        fib(n-1);
        fib(n-2);
    }
}
 
 
int main(){
    int T,N,i;
 
    scanf("%d",&T);
 
    for(i=0;i<T;i++){
        scanf("%d",&N);
        cnt_0=0;
        cnt_1=0;
 
        fib(N);
        printf("%d %d\n",cnt_0,cnt_1);
    }
 
    return 0;
}
cs


반응형
댓글