Algorithm/📖Baekjoon

#1003 피보나치 함수

yewoneeee 2022. 5. 4. 14:47

# 문제

# 입력 및 출력

# 풀이

간단하게 dp로 풀면 된다

f(0)과 f(1)의 0, 1 호출 횟수를 pair 배열에 저장해두고

f(2)부턴 f(n-1), f(n-2)의 0, 1 호출 횟수를 더해주면 됨

N은 40보다 작거나 같은 자연수, 0 이므로 pair 배열 크기는 41로 설정해주면 됨

#include <iostream>
using namespace std;

int main() {
	pair<int, int> dp[41];
	dp[0] = make_pair(1, 0);
	dp[1] = make_pair(0, 1);
	for (int i = 2; i < 41; i++) {
		dp[i].first = dp[i - 1].first + dp[i - 2].first;
		dp[i].second = dp[i - 1].second + dp[i - 2].second;
	}
	int T;
	cin >> T;
	for (int i = 0; i < T; i++) {
		int N;
		cin >> N;
		cout << dp[N].first << " " << dp[N].second << "\n";
	}
}

pair 배열 대신 2차원 배열로 풀어도 됨