728x90
본 알고리즘 풀이는 Routine Study에서 진행하고 있습니다.
저를 포함한 구성원이 대부분 초보이므로, 원하시는분은 언제라도 들어오셔도 좋습니다.
문의는 댓글 바람.
[처음 생각한 접근 방법]
오늘 문제는 Dynamic Programming의 예제를 풀어보았습니다.
피보나치의 경우 f(n) = f(n-1) + f(n-2)라는 점화식이 나오는데 이를 구현하는 문제입니다.
Dynamic Programming을 이용하면 매번 f(n) 값을 구할 필요가 없습니다.
f(n)의 값을 한 번 구하면 그 값을 배열에 저장해놓았다가, 다시 이 값을 찾을 때 배열에 저장 되어 있는 값을 리턴하면 됩니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
class Main {
static int[] dp;
public static void main(String[] args) throws IOException {
BufferedReader bfr = new BufferedReader(new InputStreamReader(System.in));
// n번째 피보나치 수를 구하여라
int n = Integer.parseInt(bfr.readLine());
dp = new int[n+1];
System.out.println(recursion(n));
}
private static int recursion(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
if (dp[n] != 0) return dp[n]; // 배열의 값이 0이 아니면 이전에 구한 값임.
dp[n] = recursion(n-2) + recursion(n-1);
return dp[n];
}
}
728x90
반응형
'알고리즘 문제 풀이 > 동적프로그래밍' 카테고리의 다른 글
백준 - 이친수(Kotlin) (0) | 2022.02.05 |
---|---|
백준 - 계단 오르기 (0) | 2022.01.29 |
백준 - 연속합 (0) | 2021.12.23 |
백준 - 이름 궁합 (0) | 2021.12.12 |
509. Fibonacci Number (0) | 2021.10.25 |