# 생각

dp를 이용하여 해결할 수 있다

 

테이블 정의

fibo[i][k] = 숫자 i가 0 또는 1을 호출한 횟수

 

점화식

fibo[i][k] = fibo[i-1][k] + fibo[i-2][k]

 

초기값

fibo[0][0] = fibo[1][1] = 1

 

 

# 전체 코드

#include <bits/stdc++.h>
using namespace std;

int fibo(int n, int index)
{
	int f[44][2] = {};
	f[0][0] = f[1][1] = 1;
	for (int i = 2; i <= n; i++)
	{
		f[i][0] = f[i - 1][0] + f[i - 2][0];
		f[i][1] = f[i - 1][1] + f[i - 2][1];
	}
	return f[n][index];
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int TC;
	cin >> TC;
	while (TC--)
	{
		int n;
		cin >> n;
		cout << fibo(n, 0) << ' ' << fibo(n, 1) << '\n';
	}
}

 


https://www.acmicpc.net/problem/1003

 

1003번: 피보나치 함수

각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.

www.acmicpc.net

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ] 2606_바이러스 with cpp  (0) 2022.03.07
[BOJ] 1260_DFS와 BFS with cpp  (0) 2022.03.06
[BOJ] 12852_1로 만들기 2 with cpp  (0) 2022.03.04
[BOJ] 11659_구간 합 구하기 4 with cpp  (0) 2022.03.04
[BOJ] 11726_2×n 타일링 with cpp  (0) 2022.03.04

+ Recent posts