본문 바로가기
Problem Solving

[BOJ 1788] 피보나치 수의 확장

by Ladun 2020. 1. 1.

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

 

1788번: 피보나치 수의 확장

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

www.acmicpc.net


피보나치 수 F(n)에서 n이 음수의 경우에도 값을 구하는 문제이다.

 

-1부터 F(n)을 구하다 보면 값의 절대값이 대칭이 되는 것을 볼 수 있다.

 

F(n)이 음수인지, 양수인지, 0인지를 구하고 F(|n|)을 구하면 된다.


#include <stdio.h>

unsigned long long F[1000001] = { 0 ,1 };

int main()
{
	int n;
	scanf("%d", &n);

	if (n < 0)
	{
		printf("%d\n", n % 2 == 0? -1: 1);
		n *= -1;
	}
	else if (n > 0) printf("1\n");
	else printf("0\n");

	for (int i = 2; i <= n; i++)
		F[i] = F[i - 1] % 1000000000 + F[i - 2] % 1000000000;

	printf("%llu", F[n] % 1000000000);

}

'Problem Solving' 카테고리의 다른 글

[BOJ 9095] 1, 2, 3 더하기  (0) 2020.01.02
[BOJ 2163] 초콜릿 자르기  (0) 2020.01.02
[BOJ 2407] 조합  (0) 2020.01.01
[BOJ 3054] 피터팬 프레임  (0) 2019.12.30
[BOJ 2960] 에라토스테네스의 체  (0) 2019.12.30