C로 구현한 2748번 피보나치 수2 문제 풀이입니다.
https://www.acmicpc.net/problem/2748
#include <stdio.h>
long long d[91];
long long fibo(int x) {
if (x == 1)
return 1;
if (x == 2)
return 1;
if (d[x] != 0)
return d[x];
return d[x] = fibo(x - 1) + fibo(x - 2);
}
int main() {
int num;
scanf("%d", &num);
printf("%lld", fibo(num));
}
문제에서 요구하는 바와 같이 특정번째의 피보나치 수를 구한다.
fibo( ) 메소드에서 전달받은 값이 1 혹은 2 라면 1을 리턴한다. 피보나치 수의 첫번째, 두번째 값은 1이기 때문이다.
또한, 전달받은 값이 1 혹은 2가 아니라면 배열 d의 해당 인덱스 값이 0이 아닌지 판별하여 0이 아니라면 그 값을 리턴한다.
위 조건도 만족하지 않는다면 재귀 호출하는 방식으로 x - 1 번째 수와 x - 2 번째 수를 더하여 리턴한다.
주의할 점은 문제에서 수를 입력할 때의 범위는 90보다 작거나 같은 자연수이다.
배열 d와 fibo( ) 메서드의 데이터 타입이 int 형이라면 90이 입력되었을 때 허용범위를 벗어나기 때문에
long long 타입으로 선언하여 처리하도록 한다.
'백준(C언어) 풀이 > 다이나믹 프로그래밍' 카테고리의 다른 글
백준(Python) 18353번 병사 배치하기 풀이 (0) | 2022.01.13 |
---|---|
백준(C) 10870번 피보나치 수 5 풀이 (0) | 2021.08.31 |
백준(C) 11727번 2xn 타일링2 풀이 (0) | 2021.07.26 |
백준(C) 11726번 2xn 타일링 풀이 (0) | 2021.07.26 |