본문 바로가기

Algorithm

(C++) - 백준(BOJ) 1788번 : 피보나치 수의 확장

반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#define ll long long
using namespace std;
ll n;
ll a[1000001];
void fibo()
{
    a[0= 0;
    a[1= 1;
    for (int num = 2; num <= n; num++)
    {
        a[num] = (a[num - 1+ a[num - 2]) % 1000000000;
    }
}
int main() {
    
    cin >> n;
    if (n == -1)//f(-1)만 양수이므로 둘다 1을 출력한다.
    {
        cout << 1 << '\n' << 1 << '\n';
        return 0;
    }
    else if (n < -1)//n이 음수면 양수로 만들어준뒤 피보나치 수열을 구현.
    {
        n *= -1;
        fibo();
        if (n % 2 == 0)
        {
            cout << -1 << '\n' << a[n];
        }
        else
        {
            cout << 1 << '\n' << a[n];
        }
        return 0;
    }
    else
    {
        fibo();
        if (a[n] > 0) { cout << 1 << '\n' << a[n] ; }
        else if (a[n] == 0cout << 0 << '\n' << 0 << '\n';
    }
    
}