문제 링크 : https://www.acmicpc.net/problem/1003
문제 설명
피보나치함수에서 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 |