문제
코드
이 문제는 재귀를 이용하여 풀 수 있다.
하지만 Memoization를 이용하는 DP를 이용하면 더 효율적으로 풀 수 있다.
DP 하향식 방법을 이용했고 작은 문제의 결과를 저장하기 위해 fibo[] 배열을 사용했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class _2748_피보나치_수2 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
long result = fibo(n);
System.out.println(result);
}
public static long fibo(int n) {
if (n <= 1) return n;
// Memoization
long[] fibo = new long[n+1];
fibo[0] = 0;
fibo[1] = 1;
// 상향식 방법
for (int i = 2; i <= n; i++) fibo[i] = fibo[i-2] + fibo[i-1];
return fibo[n];
}
}
'코딩 테스트 > 알고리즘' 카테고리의 다른 글
[백준] 9095 1, 2, 3 더하기(Silver.3) - DP(동적 계획법) (0) | 2024.08.19 |
---|---|
[백준] 1463 1로 만들기(Silver.3) - DP(동적 계획법) (0) | 2024.08.18 |
[프로그래머스] 43163 단어 변환(Lv.3) - DFS (0) | 2024.08.15 |
[백준] 2644 촌수계산(Silver.2) - DFS (0) | 2024.08.15 |
[백준] 10971 외판원 순회2(Sliver. 2) - DFS (0) | 2024.08.15 |