항해99 코테

99클럽 코테 스터디 2일차 TIL + 피보나치 비스무리한 수열

탱도시락 2025. 4. 1. 18:50

✔️ 오늘의 학습 키워드

  • 피보나치 비스무리한 수열

 

✔️ 공부한 내용

  • 원래 피보나치 수열의 점화식: f(n) = f(n-1) + f(n-2)이지만
    피보나치 비스무리한 수열의 점화식은 f(n) = f(n-1) + f(n-3)이다. 비슷하지만 다르다.

 

✔️ 오늘의 회고

1.  어떤 문제가 있었고, 나는 어떤 시도를 했는지

  - 피보나치 수열을 이미 풀어본 적이 있었기에 푸는데 크게 어려움이 있진 않았다.

 

 

2.  어떻게 해결했는지

  • 동적 계획법(DP)을 활용하여 이전에 계산한 값들을 배열에 저장하고, 점화식에 따라 새로운 값을 계산하는 방식으로 해결했다. 
    초기값 f(1) = f(2) = f(3) = 1을 설정하고, 4번째 항부터는 점화식을 적용하여 계산했다.
#include <iostream>
#include <vector>

using namespace std;

int main() {

    int n;
    cin >> n;
    
    // 기본 케이스 처리
    if (n <= 3) {
        cout << 1 << endl;
        return 0;
    }
    
    // 수열을 저장할 배열 선언
    // 문제에서 n이 최대 116까지 가능하므로, 충분한 크기로 설정
    vector<long long> fib(n+1, 0);
    
    // 초기값 설정
    fib[1] = 1;
    fib[2] = 1;
    fib[3] = 1;
    
    // 점화식 f(n) = f(n-1) + f(n-3)을 이용해 수열 계산
    for (int i = 4; i <= n; i++) {
        fib[i] = fib[i-1] + fib[i-3];
    }
    
    cout << fib[n] << endl;
    
    return 0;
}

 

3.  무엇을 새롭게 알았는지

  • 피보나치 수열만이 아닌 비스무리한 수열도 있다는 것을 알았다.