https://www.acmicpc.net/problem/1003
1003번: 피보나치 함수
각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.
www.acmicpc.net
피보나치 수열의 수 fibonacci(n)은 fibonacci(n - 1) + fibonacci(n - 2)이다.
따라서 fibonacci(n)이 fibonacci(0)과 fibonacci(1)을 호출한 횟수 fib(n, 0)과 fib(n, 1) 역시 fib(n - 1, 0) + fib(n - 1, 1)과 fib(n - 2, 0) + fib(n - 2, 1)로 나타낼 수 있다.
#include <cstdio>
int main() {
// T: 테스트 케이스의 수, N: 각 테스트 케이스에
// fib[i][j]: i번째 피보나치 수를 구할 때 j번째 피보나치 수가 호출되는 횟수
int T, N, fib[41][2] = {{1, 0}, {0, 1}};
//각 fib에 대해 fib[i][0]과 fib[i][1]에 값을 입력
for (int i = 2; i <= 40; i++) for (int j = 0; j < 2; j++)
fib[i][j] = fib[i - 1][j] + fib[i - 2][j];
// 테스트 케이스의 수를 입력받은 뒤
scanf("%d", &T);
// 각 케이스에서 fibonacci(0)과 fibonacci(1)의 호출 횟수를 출력
while (T--) {
scanf("%d", &N);
printf("%d %d\n", fib[N][0], fib[N][1]);
}
return 0;
}
'알고리즘 > 문제 풀이' 카테고리의 다른 글
1005번: ACM Craft (0) | 2021.12.05 |
---|---|
1004: 어린 왕자 (0) | 2021.12.04 |
1002번: 터렛 (0) | 2021.12.04 |
1001번: A-B (0) | 2021.12.03 |
1000번: A+B (0) | 2021.12.03 |