이 문제는 피보나치 수열의 n번째 수를 구해야한다.
단순하게 재귀함수로 구하면 알고리즘의 속도가 느리기 때문에 피보나치 수열의 계산결과를 저장할 배열을 사용했다.
#include <stdio.h>
#include <stdlib.h>
long long int *Arr;
void Fibo(int n) {
Arr[n] = Arr[n - 1] + Arr[n - 2];
}
int main() {
int n;
scanf("%d", &n);
Arr = (long long int*)malloc(sizeof(long long int)*(n + 1));
Arr[0] = 0;
Arr[1] = 1;
for (int i = 2; i <= n; i++)
Fibo(i);
printf("%lld\n", Arr[n]);
free(Arr);
Arr = NULL;
return 0;
}
int 자료형의 크기 안에 저장하려하면 오버플로우가 났다.
때문에 long long int형으로 동적 포인터 할당 해서 문제를 해결했다.
'백준 연습' 카테고리의 다른 글
백준 15651번 C언어 (0) | 2020.08.16 |
---|---|
백준 15650 C언어 (0) | 2020.08.16 |
백준 15649 C언어 (0) | 2020.08.16 |
백준 9461 C언어 (0) | 2020.08.15 |
백준 1003번 C언어 (0) | 2020.08.14 |