실버3 : 동적 계획법을 사용하는 문제이다.

Code

// 백준 1003번 피보나치 함수
#include <iostream>
using namespace std;
int N = 0, T = 0;
int dp[50] = {0};
// dp[n] = an 까지의 호출되는 1의 개수
// dp[n] = dp[n-2] + dp[n-1];
// 호출되는 0의 개수는, dp[n-1]과 동일하다.
 
int main(){
    dp[0] = 0;
    dp[1] = 1;
    for (int i = 2; i < 41; i++) {
        dp[i] = dp[i-1] + dp[i-2];
    }
    cin >> T;
    for (int tc = 0; tc < T; tc++) {
        cin >> N;
        if (N == 0) cout << 1 << " " << dp[N] << '\n';
        else        cout << dp[N-1] << " " << dp[N] << '\n';
    }
}
 

Reference