Sol)
#include <stdio.h>
int main()
{
unsigned long long fibo[91] = {0, 1};
int n = 0;
for(int i = 2; i < sizeof(fibo) / sizeof(long long); i++){
fibo[i] = fibo[i - 1] + fibo[i - 2];
}
scanf("%d", &n);
printf("%llu\n", fibo[n]);
return 0;
}
피보나치 수 2 문제는 전에 풀었던 피보나치 수 문제와 기본 로직은 같다. 단지 n의 범위가 90까지 커졌다는 변화만 있을 뿐이다. 전에 n이 훨씬 더 커지면 포인터로 동적 할당을 해야겠다고 했는데, 지금 생각해보니 어차피 문제에서 n의 최대값이 정해져 있을텐데 굳이 느린 malloc함수를 써가면서까지 그래야할까 싶었다. 그냥 배열을 최대값 만큼 선언하는 게 빠를 것 같다.
이 문제에서는 내가 전 문제에서 추가로 생각하지 못한 부분, 바로 자료형의 크기에 관해 물어보는 문제였다. 피보나치 수는 n값이 커지면 계속해서 양의 방향으로 늘어나기 때문에 일정 n을 넘어가면 int값으로는 담을 수 없게 된다. 따라서 넉넉하게 unsigned long long형으로 배열을 만들어 주었다. unsigned가 붙을 수 있는 이유는, 어차피 피보나치 수열의 수들은 0이상이기 때문이다.
unsigned long long 자료형의 표현 가능 정수 범위: 0 ~ 18,446,744,073,709,551,615
'BOJ' 카테고리의 다른 글
백준 1037번 약수 [C언어] (0) | 2022.08.18 |
---|---|
백준 1003번 피보나치 함수 [C언어] (0) | 2022.08.16 |
백준 2747번 피보나치 수 [C언어] (0) | 2022.08.15 |
백준 2863번 이게 분수? [C언어] (0) | 2022.08.13 |
백준 1018번 체스판 다시 칠하기 [C언어] (0) | 2022.08.10 |