Algorithm/C

[백준] 2748번 : 피보나치 수 2 C/C++ 문제풀이 솔루션

Printemp 2021. 11. 23.

문제

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다.

이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가 된다.

n=17일때 까지 피보나치 수를 써보면 다음과 같다.

0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597

n이 주어졌을 때, n번째 피보나치 수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 n이 주어진다. n은 90보다 작거나 같은 자연수이다.

출력

첫째 줄에 n번째 피보나치 수를 출력한다.

 

 

 

 

 

 

 

 

 

 

 기본적으로 피보나치 수 1 문제와 같은 알고리즘을 사용한다.

https://amanteattirance.tistory.com/78

 

[백준] 2747번 : 피보나치 수 C/C++ 문제풀이 솔루션

문제 피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n

amanteattirance.tistory.com

이제 달라지는 것은 n의 크기인데 피보나치 수 1에서는 최대 45였던것이 이번 문제에서 90으로 늘어났다. 같은 코드를 이용하면 당연히 오류가 난다. n이 90일때의 피보나치 수는 굉장히 크기 때문에 배열을 int형이 아닌 long long 형으로 선언해 주었다.

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

int main()
{
	long long fibonacci[90] = { 0 };
	long long* f = fibonacci;
	int n;
	f[1] = 1;
	for (int i = 2; i <= 90; i++)
		f[i] = f[i - 1] + f[i - 2];
	scanf("%d", &n);
	printf("%lld", f[n]);

	return 0;
}

댓글

💲 추천 글