boj 1003 피보나치 함수 c++

 

 

들어오는 숫자 N은 0~50까지의 범위이다.

이에 대해 피보나치 함수에서 0과 1을 몇 번 출력하는지를 묻는 문제인데,

사실 2부터 50까지의 범위에서 어떤 수가 fibo(0), fibo(1)을 몇 번 호출하는지는 n-1번째에서 나온 fibo(0)과 fibo(1)의 갯수에 n-2번째에서 나온 fibo(0)과 fibo(1)의 갯수를 더한 것 과 같다.

그런데 우리는 시간이 무려 0.25초 밖에 주어지지 않아 아주 촉박하기도 한데다

기존의 피보나치 함수를 호출하면서 카운트 하기에는 n이 50이 들어오거나 했을 때 그냥 영원히 컴퓨터를 돌리고 있어야 할 것이다.

 

따라서 이것을 미리 배열에 담아두기로 한다.

fibo(0)과 fibo(1)을 미리 배열에 넣어놓고, 2~50까지는 위에서 설명한 원리대로 집어넣는다.

 

코드

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

# define X first
# define Y second

pair<int, int> arr[51];
int testcaseCount;

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    arr[0].X = 1;
    arr[0].Y = 0;
    arr[1].X = 0;
    arr[1].Y = 1;
    for (int i = 2; i < 51; i++)
    {
        arr[i].X = arr[i - 1].X + arr[i - 2].X;
        arr[i].Y = arr[i - 1].Y + arr[i - 2].Y;
    }
    
    cin >> testcaseCount;
    while (testcaseCount--)
    {
        int t;
        cin >> t;
        cout << arr[t].X << ' ' << arr[t].Y;
        if (testcaseCount != 0)
            cout << "\n"; // 마지막 출력에 개행이 들어가니 실패하더라..
    }
    return (0);
}

 

 

백준 1003 피보나치 함수 cpp

'Algorithm' 카테고리의 다른 글

boj 1992  (0) 2021.02.26
boj 1780  (0) 2021.02.25
boj 18111 마인크래프트 c++  (0) 2021.02.18
boj 15829 Hashing c++  (0) 2021.02.17
boj 11866 요세푸스 문제 0 c++  (0) 2021.02.17
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기
// custom