곽로그

[백준 2748, Java] 피보나치 수2 본문

알고리즘/백준

[백준 2748, Java] 피보나치 수2

일도이동 2020. 12. 22. 21:38
반응형

문제

www.acmicpc.net/problem/2748

 

2748번: 피보나치 수 2

피보나치 수는 0과 1로 시작한다. 0번째 피보나치 수는 0이고, 1번째 피보나치 수는 1이다. 그 다음 2번째 부터는 바로 앞 두 피보나치 수의 합이 된다. 이를 식으로 써보면 Fn = Fn-1 + Fn-2 (n ≥ 2)가

www.acmicpc.net

 

풀이

 코드로 설명이 되어서 풀이는 패스. 주의해야 할 점은 출력하는 피보나치 수의 자료형은 long 

 

코드 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {
    public static int N;
    public static long[] memo;
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        N = Integer.parseInt(br.readLine());
        memo = new long[N+1];
        long result = getFiboByTopDown(N);

        bw.write(String.valueOf(result));
        bw.flush();

        br.close();
        bw.close();

    }
    public static long getFiboByBottomUp(){
        for(int n = 1; n<=N; n++){
            if(n==1){
                memo[n] = 1;
            }
            else{
                memo[n] = memo[n-1] + memo[n-2];
            }
        }
        return memo[N];
    }
    public static long getFiboByTopDown(int n){
        if(n==1){
            memo[n] = 1;
            return 1;
        }
        else if(n<1){
            return 0;
        }
        else if(memo[n]!=0){
            return memo[n];
        }
        else{
            memo[n] = getFiboByTopDown(n-1) + getFiboByTopDown(n-2);
            return memo[n];
        }
    }
}
반응형
Comments