PS/Baekjoon Online Judge

[백준 1788] 피보나치 수의 확장 [C]

kimyoungrok 2021. 8. 10. 01:54
728x90

백준 - 1788


풀이

F(1) = 1 = F(0) + F(-1), F(-1) = 1

F(0) = 0 = F(-1) + F(-2), F(-2) = -1

F(-1) = 1 = F(-2) + F(-3), F(-3) = 2

F(-2) = -1 = F(-3) + F(-4), F(-4) = -3

F(-3) = 2 = F(-4) + F(-5), F(-5) = 5

 

n이 음수이고, 짝수일때만, F(n)이 -1이다.


소스코드

#include <stdio.h>
int main(){
    int n, op = 1;
    long long dp[2] = {0, 1};
    scanf("%d", &n);
    if (n < 0){
        if (n%2 == 0) op = -1;
        n *= -1;
    }else op = (n ? 1 : 0);
    if (n >= 2){
        for (int i = 1; i < n; i++){
            long long temp = (dp[0] + dp[1]) %1000000000;
            dp[0] = dp[1], dp[1] = temp;
        }
        n = 1;
    }
    printf("%d\n%lld", op, dp[n]);
}

출처

 

1788번: 피보나치 수의 확장

첫째 줄에 F(n)이 양수이면 1, 0이면 0, 음수이면 -1을 출력한다. 둘째 줄에는 F(n)의 절댓값을 출력한다. 이 수가 충분히 커질 수 있으므로, 절댓값을 1,000,000,000으로 나눈 나머지를 출력한다.

www.acmicpc.net

728x90

'PS > Baekjoon Online Judge' 카테고리의 다른 글

[백준 15654] N과 M (5) [C]  (0) 2021.08.10
[백준 15652] N과 M (4) [C]  (0) 2021.08.10
[백준 5430] AC [C]  (1) 2021.08.09
[백준 15650] N과 M (2) [C]  (0) 2021.08.09
[백준 9461] 파도반 수열 [C]  (0) 2021.08.09