본문 바로가기
C/백준

[C 백준] 실버 3/ 1003번 피보나치 함수

by Meaning_ 2022. 3. 12.
728x90
반응형

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

 

1003번: 피보나치 함수

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

www.acmicpc.net

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
34
#include <stdio.h>
 
 
 
 
int main() {
 
    int t;
    scanf("%d"&t);
 
    int fibo[41][2];
 
    fibo[0][0= 1;
    fibo[0][1= 0;
    fibo[1][0= 0;
    fibo[1][1= 1;
 
 
    for (int i = 2; i < 41; i++) {
        fibo[i][0= fibo[i - 1][0+ fibo[i - 2][0];//0이 출력된
        fibo[i][1= fibo[i - 1][1+ fibo[i - 2][1];//1이 출력된
    }
    
    for (int i = 0; i < t; i++) {
        int num;
        scanf("%d"&num);
        printf("%d ", fibo[num][0]);
        printf("%d\n", fibo[num][1]);
    }
 
    
    
}
 
cs

 

처음에는 구조체를 사용해서 풀어볼까라는 생각이 들었다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
struct count{
    int cnt1;
    int cnt2;
}

struct count c[41];
 
int fibo(n){
    if(n==0){
        c[n].cnt1++;
        return 0;
    }
    else if(n==1){
        c[n].cnt2++;
        return 1;
    }else{
        return fibo(n-1)+fibo(n-2);
    }
 
}
 
cs

 

이런식으로 말이다! 근데 이렇게 하면 우선 구조체 배열을 전역변수 선언해줘야 하는데 이게 main함수에서 먹히는 느낌이 들지 않았다. 이걸 전역변수로 어떻게 써줘야할지 몰라서 우선 포기했고

사실 더 큰 문제는 시간초과이다. 저렇게 재귀로 돌려주면 시간을 무지 잡아먹는다.

그래서 결국 다시 dp로 돌아왔다 ㅋㅋㅋ

 

dp[41][2]를 만들어서

 

dp[n][0] --> 0을 출력한 횟수

dp[n][1] --> 1을 출력한 횟수로 간단히 해결할 수 있었다.

 

 

728x90
반응형

'C > 백준' 카테고리의 다른 글

[C 백준] 실버 5/ 1094번 막대기  (0) 2022.03.10

댓글