문제 링크 : https://www.acmicpc.net/problem/1003

 

1003번: 피보나치 함수

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

www.acmicpc.net

 문제 설명 

 

피보나치함수에서 0과 1을 호출하는 횟수를 출력 하면됨 

 

 알고리즘 

 

정답비율이 20%대인데 이해불가 

0과 1을 호출하는 횟수도 피보나치 수열을 이루기때문이다 . 피보나치처럼 dp 로풀면 된다.

 코드 

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
35
36
37
38
39
40
41
42
43
44
45
#include<iostream>
 
using namespace std;
 
 
int dp1[45];
int dp2[45];
 
//0의 갯수 구하는 함수
int func0(int n) {
    if (dp1[n] != -1)return dp1[n];
    if (n == 0)return 1;
    if (n == 1)return 0;
 
    return dp1[n] = func0(n - 1+ func0(n - 2);
 
}
 
//1의 갯수 구하는 함수
int func1(int n) {
    if (dp2[n] != -1)return dp2[n];
    if (n == 0)return 0;
    if (n == 1)return 1;
 
    return dp2[n] = func1(n - 1+ func1(n - 2);
 
}
 
 
int main() {
    int N;
    cin >> N;
    for (int i = 0; i < 45; i++) {
        dp1[i] = -1;
        dp2[i] = -1;
    }
 
    for (int i = 0; i < N; i++) {
        int num;
        cin >> num;
        cout << func0(num) << " " << func1(num) << "\n";
    }
 
}
 
cs

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

백준 11000번: 강의실 배정  (0) 2020.04.09
백준 1700번: 멀티탭 스케줄링  (0) 2020.04.09
백준 2573번: 빙산  (0) 2020.04.06
백준 9095번 :R G B 거리  (0) 2020.04.06
백준 9095번 : 1,2,3 더하기  (0) 2020.04.06
ariz1623