피보나치 함수를 호출했을 때 0과 1을 각각 몇 번 호출하는지 출력하는 문제다
처음엔 시간제한이 있는 줄 모르고 신나게 위 함수에서 printf를 지우고
0과 1을 return 할 때마다 만들어둔 변수에 +1 해준 뒤 최종 return시 그 변수의 값을 출력하는 형태로 짰다
결과는 나오지만 당연히 시간초과...
규칙부터 찾아야 할 것 같다
0부터 차례대로 입력해 보면 결과가 피보나치 수열 그 자체임을 알 수 있다 (?)
0이 호출된 횟수는 N-1번째 피보나치 수, 1이 호출된 횟수는 N번째 피보나치 수다 (N!=0)
이제 코딩은 더 쉽다
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
|
#include <iostream>
using namespace std;
int main() {
int t, n;
long long f[41];
cin >> t;
while (t--) {
cin >> n;
if(n==0)
cout << 1 << ' ' << 0 << "\n";
else {
f[0] = 0;
f[1] = 1;
for (int i = 2; i <= n; i++) {
f[i] = f[i - 1] + f[i - 2];
}
cout << f[n - 1] << ' ' << f[n] << "\n";
}
}
}
|
cs |
이제 시간 초과는 되지 않지만 N이 입력될 때마다 피보나치 수를 구하게 되므로 좀 아쉽다
미리 구해놓고 불러다 쓰면 더 빠를 것 같아서 또 수정
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
|
#include <iostream>
using namespace std;
int main() {
int t, n;
long long f[41];
cin >> t;
//피보나치 수열 구해놓기
f[0] = 0;
f[1] = 1;
for (int i = 2; i <= 40; i++)
f[i] = f[i - 1] + f[i - 2];
while (t--) {
cin >> n;
if(n==0)
cout << 1 << ' ' << 0 << "\n";
else
cout << f[n - 1] << ' ' << f[n] << "\n";
}
}
|
cs |
깔끔
'Algorithm > BOJ' 카테고리의 다른 글
[백준 알고리즘/BOJ/C++] 1904 01타일 (0) | 2021.01.31 |
---|---|
[백준 알고리즘/BOJ/C++] 9184 신나는 함수 여행 (0) | 2021.01.31 |
[백준 알고리즘/BOJ/C++] 14889 스타트와 링크 (0) | 2021.01.30 |
[백준 알고리즘/BOJ/C++] 14888 연산자 끼워넣기 (0) | 2021.01.30 |
[백준 알고리즘/BOJ/C++] 2580 스도쿠 (0) | 2021.01.30 |