본문 바로가기
알고리즘/백준(JAVA)

[백준] 2748번: 피보나치 수 2 [JAVA-자바]

by 콘텐츠박스 2021. 1. 12.
반응형

문제

www.acmicpc.net/problem/2748

 

2748번: 피보나치 수 2

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

www.acmicpc.net

 

Problem

  • 피보나치를 구하는 가장 기본적인 DP 문제이다.

메모제이션을 안쓰면

시간복잡도 O(2^N)

메모제이션을 쓰면

시간복잡도 O(N) 

Solution

  • DP를 이용해서 문제를 해결한다.

Code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
	static long[] dp = new long[91];

	public static void main(String[] args) throws NumberFormatException, IOException {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringBuilder sb = new StringBuilder();

		dp[0] = 0;
		dp[1] = 1;

		int n = Integer.parseInt(br.readLine());

		Arrays.fill(dp, -1);

		System.out.println(fibonacci(n));
	}

	static long fibonacci(int n) {

		if (n == 0)
			return 0;
		if (n == 1)
			return 1;
		if (dp[n] == -1) {
			dp[n] = fibonacci(n - 1) + fibonacci(n - 2);
		}
		return dp[n];

	}
}

 

댓글