피보나치 수 2

09 July 2019

문제 : https://www.acmicpc.net/problem/2748

이번은 동적 계획법으로 피보나치 수를 계산하는 문제를 풀어보도록 하겠습니다.

import java.util.Scanner;

public class Main {

    private static long[] cache;

    public static void main(String args[]) {

        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();

        cache = new long[N + 1];

        long ret = pivonacci(N);

        System.out.println(ret);

    }

    private static long pivonacci(int n) {
        if (n == 0) {
            cache[0] = 0;
            return 0;
        } else if (n == 1) {
            cache[1] = 1;
            return 1;
        }

        if (cache[n] != 0) {
            return cache[n];
        } else {
            long val = pivonacci(n - 1) + pivonacci(n - 2);
            cache[n] = val;
            return val;
        }
    }

}
이번은 피보나치 수열을 동적계획법으로 그대로 표현하여 풀어주도록 합니다.
주요한 점은 90번째 피보나치 수열의 값은 Integer의 최대값을 벗어나므로 long으로 선언해주도록 합니다.