Koala - 17기/코딩테스트 심화 스터디

[백준/C++]14495번 : 피보나치 비스무리한 수열

alswns8081 2025. 1. 14. 14:52

 

https://www.acmicpc.net/problem/14495

접근 방법

f(1) = f(2) = f(3) = 1 이므로 미리 초기화, n을 입력받아 n번째 피보나치 비스무리한 수를 출력해야 하므로, vector로 선언(배열로 해도 굳이 상관은 없을듯)

f(n) = f(n-1) + f(n-3) 이므로, v[i] = v[i-1] + v[i-3] 으로 반복문을 돌며 n번째 비스무리한 수까지 계산

 

코드

#include <iostream>
#include <vector>

using namespace std;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int n;
    cin >> n;

    if (n == 1 || n == 2 || n == 3) {
        cout << 1;
        return 0;
    }
    
    vector<long long> v(n + 1);

    v[1] = 1; v[2] = 1; v[3] = 1;

    for (int i = 4; i <= n; i++) {
        v[i] = v[i - 1] + v[i - 3];
    }

    cout << v[n];

    return 0;
}

 

발생한 에러

int Fibo(int n) {
    if (n == 1 || n == 2 || n == 3) return 1;

    else return Fibo(n-1) + Fibo(n-3);
}
  • 재귀적으로 처리하려고 시도
    • 런타임 에러 발생
if (n == 1 || n == 2 || n == 3) {
    cout << 1;
    return 0;
}
  • 코드에서 위 조건문을 작성하지 않은 상태로 Test Case에 n=1을 입력하면 제대로 실행이 안되는 오류가 발생
    • 실제로 백준에서도 런타임 에러(InvalidNextSize)의 에러가 발생
      *이유가 뭔지는 아직도 모르겠음*