문제링크 : https://www.acmicpc.net/problem/14495
14495번: 피보나치 비스무리한 수열
피보나치 비스무리한 수열은 f(n) = f(n-1) + f(n-3)인 수열이다. f(1) = f(2) = f(3) = 1이며 피보나치 비스무리한 수열을 나열하면 다음과 같다. 1, 1, 1, 2, 3, 4, 6, 9, 13, 19, ... 자연수 n을 입력받아 n번째 피보
www.acmicpc.net
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;
int N;
ll arr[117];
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> N;
arr[1]=arr[2]=arr[3]=1; //초기값
for(int i=4; i<=116; i++) // 1<=N<=116
{
arr[i] = arr[i-1] + arr[i-3]; //점화식
}
cout << arr[N];
}
점화식이 문제에 주어져있다 (f(n) = f(n-1) + f(n-3))
주어진 점화식이 기존 피보나치 점화식을 말하는 건줄 알고 따로 규칙을 찾아 점화식을 작성하였다.
점화식이 주어져 있기 때문에 아주 간단하게 풀 수 있으나, 주의할 점은 점화식에 사용되는 배열을 long long으로 선언해줘야 한다.
N의 범위가 <=116까지이고, 이만큼 더해가는 과정에서 상당히 큰 수를 갖게 된다.
이를 생각안하고 int로 선언했다가 한 번 틀렸다.
'백준 > 실버' 카테고리의 다른 글
[백준 14426번] 접두사 찾기 (C++) (0) | 2023.11.12 |
---|---|
[백준 15900번] 나무 탈출 (C++) (0) | 2023.11.10 |
[백준 25516번] 거리가 k이하인 트리 노드에서 사과 수확하기 (C++) (0) | 2023.11.03 |
[백준 13116번] 30번 (C++) (0) | 2023.11.01 |
[백준 25511번] 값이 k인 트리 노드의 깊이 (C++) (0) | 2023.10.28 |