반응형
문제
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];
}
}
'알고리즘 > 백준(JAVA)' 카테고리의 다른 글
[백준] 1436번: 영화감독 숌 [JAVA-자바] (0) | 2021.01.19 |
---|---|
[백준] 1018번: 체스판 다시 칠하기 [JAVA-자바] (0) | 2021.01.19 |
[백준] 1003번: 피보나치 함수 [JAVA-자바] (0) | 2021.01.12 |
[백준] 15650번: N과 M(2) [JAVA-자바] (0) | 2021.01.08 |
[백준] 15649번: N과 M(1) [JAVA-자바] (0) | 2021.01.07 |
댓글