https://www.acmicpc.net/problem/1003
1003번: 피보나치 함수
각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.
www.acmicpc.net
문제
풀이
아~~ 주 쉽게 생각했다가 짜증만 엄청 냈던 문제..
시간초과를 생각못하고 어떻게 풀던 시간초과가 나오고, 계속 '이렇게해서 안되면 어쩌란거야 ?'를
반복하다가 찾아보니 점화식을 이용하는 문제였다.
이럴거면 피보나치 위에 그 함수코드는 왜있었는지 이해불가..
아무튼 피보나치 함수의 점화식은 아래와 같다.
N이 0일때, return값이 0인경우 = 1, 1인경우 = 0
N이 1일때, return값이 0인경우 = 0, 1인경우 = 1
N이 2일때, return값이 0인경우 = 1, 1인경우 = 1
N이 3일때, return값이 0인경우 = 1, 1인경우 = 2
N이 4일때, return값이 0인경우 = 2, 1인경우 = 3
N이 5일때, return값이 0인경우 = 3, 1인경우 = 5
.....
0[N] = 0[N-1] + 0[N-2]
1[N] = 1[N-1] + 1[N-2]
와 같다고 볼 수 있다.
그럼 문제는 아주 간단해진다. 아래 코드를 참조하자
Code ( C++ )
#include <iostream>
using namespace std;
int T, N;
int _zero[41] = { 1,0, };
int _one[41] = { 0,1, };
int main()
{
cin >> T;
while (T--)
{
cin >> N;
for (int i = 2; i <= N; i++)
{
_zero[i] = _zero[i - 1] + _zero[i - 2];
_one[i] = _one[i - 1] + _one[i - 2];
}
cout << _zero[N] << " " << _one[N] << "\n";
}
}
'💻 OnlineJudge > Baekjoon' 카테고리의 다른 글
[백준 / BOJ] C++ 2798 블랙잭 (0) | 2022.12.15 |
---|---|
[백준 / BOJ] C++ 1107 리모컨 (0) | 2022.12.15 |
[백준 / BOJ] C++ 2448 별찍기 - 11 (0) | 2022.12.07 |
[백준 / BOJ] C++ 2407 조합 (0) | 2022.12.07 |
[백준 / BOJ] C++ 2096 내려가기 (0) | 2022.11.28 |