알고리즘

백준 14495번 피보나치 비스무리한 수열 (JAVA)

박카스마시며코딩 2023. 10. 11. 15:16

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

 

저는 DP를 이용해 문제를 해결하였습니다.

피보나치 수열을 풀때와 같지만, 1 2 3 만 다르기 때문에 이 부분만 변경하여 문제를 해결하였습니다.

 

package BOJ.dp;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class BOJ_14495 {

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        long[] dp = new long[n+1];

        long result = cal(n,dp);
        System.out.println(result);
    }
    private static final int NOT_VALID = 0;
    private static long cal(int n,long[] dp) {
        if(n == 1 || n == 2 || n == 3){
            return 1;
        }
        if(dp[n] != NOT_VALID){
            return dp[n];
        }
        return dp[n] = cal(n-1,dp) + cal(n-3,dp);
    }
}