January 18, 2022
백준 문제 링크 : https://www.acmicpc.net/problem/2748
그냥 피보나치 수열을 구하는 문제이다. 워낙 비슷한 문제가 많으므로 쉽게 풀 수 있다. 단 메모이제이션을 이용하여 훨씬 빠른 시간복잡도로 문제를 해결할 수 있다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
public class Main {
static long[] dp;
public static long Fibo(int n){
if(dp[n] != -1) return dp[n];
return dp[n] = Fibo(n-1) + Fibo(n-2);
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
dp = new long[N+1];
for(int i=0; i<dp.length; i++){
dp[i] = -1;
}
dp[0] = 0;
dp[1] = 1;
Fibo(N);
System.out.println(dp[N]);
}
}