알고리즘 풀이 방법입니다.
문제(Problem) -> 생각(Think) -> 해결책(Solution) -> 리뷰(Review) 를 통해서 정리해서 작성합니다.
Problem📄
제목과 동일
Think🤔
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int answer = 0;
for(int i=3; i<n; i++){
answer = fibo(n-1) + fibo(n-2);
}
System.out.println(answer);
}
public static Integer fibo(int n){
if(n == 0){
return 0;
}else if(n == 1){
return 1;
}else if(n == 2){
return 1;
}else{
return fibo(n-1) + fibo(n-2);
}
}
}
시간이 초과날 수 밖에 없다..
메모이제이션 동적 계획법 DP를 사용해야함!
이미 계산값을 저장해두는 방법이 메모이제이션입니다.
Solution✍
import java.io.IOException;
import java.io.BufferedReader;
import java.io.InputStreamReader;
class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
if(n==0){
System.out.println(0);
return;
} else if(n==1){
System.out.println(1);
return;
} else if(n==2){
System.out.println(1);
return;
}
long [] fibo = new long[n+1];
fibo[0] = 0;
fibo[1] = 1;
fibo[2] = 1;
for(int i=3; i<=n; i++){
fibo[i] = fibo[i-1] + fibo[i-2];
}
System.out.println(fibo[n]);
}
}
Review🤩
int로 int[] fibo하면 90같은 큰 숫자의 경우 오버플로우 발생해서 처리하지 못함
long으로 처리해야함..ㄴ
'Algorithm' 카테고리의 다른 글
[백준] 브1 > 세로읽기 10798번 - JAVA (0) | 2024.10.23 |
---|---|
[백준] 브1 > 팰린드롬수 1259번 - JAVA (0) | 2024.10.22 |
[백준] 브1 > 2007년 1924번 - JAVA (0) | 2024.10.20 |
[백준] 브1 > 약수 1037번 - JAVA (1) | 2024.10.19 |
[백준] 브1 > 최소공배수 1934번 - JAVA (0) | 2024.10.19 |