백준 문제 풀이/백준 (JAVA)
JAVA 백준 2748 피보나치 수 2
gamja00
2024. 7. 4. 18:40
https://www.acmicpc.net/problem/2748
문제
- 첫째 줄에 연산 횟수 n (1 <= n<= 90) 입력
- n번째 피보나치 수를 구해 출력.
초기 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static int sum = 0;
static int fibonacci(int n) { //피보나치
if (n == 0) {
return sum = 0;
} else if (n == 1) {
return sum = 1;
} else {
return sum = fibonacci(n - 1) + fibonacci(n - 2);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine()); //테스트 케이스
fibonacci(n);
System.out.println(sum);
}
}
수정 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
static ArrayList<Integer> arr = new ArrayList<>();
static void fibonacci(int n) { //피보나치
arr.add(0);
arr.add(1);
for (int i = 1; i < n; i++) {
int sum = arr.get(arr.size() - 2) + arr.getLast();
arr.add(sum);
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine()); //테스트 케이스
fibonacci(n);
if (n == 0) {
System.out.println("0");
} else if (n == 1) {
System.out.println("1");
} else {
System.out.println(arr.getLast());
}
}
}
메인 함수에서 arraylist 선언하고 fibonacci 함수에서 arraylist에 각 값들을 추가하는 방식으로 해봤다.
내 컴퓨터에선 잘 돌아갔는데
이런 에러가 났다.
무슨 문젠지 잘 모르겠는데 다시 고치긴 해야 될 것 같다.
아 틀리긴 했는데 뭐 때문에 에러 났는지 이제 알았다.
java11버전으로 백준에 제출하는데 arraylist의 getlast 메소드를 지원 안 하는 것 같다.
그걸 고치니 일단 뭐라도 말은 나온다...
최종 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
ArrayList<Long> arr = new ArrayList<>();
int n = Integer.parseInt(br.readLine()); //테스트 케이스
arr.add(0L);
arr.add(1L);
for (int i = 1; i < n; i++) {
Long sum = arr.get(arr.size() - 2) + arr.get(arr.size() - 1);
arr.add(sum);
}
if (n == 0) {
System.out.println("0");
} else if (n == 1) {
System.out.println("1");
} else {
System.out.println(arr.get(arr.size() - 1));
}
}
}
sum과 arraylist의 자료형을 Long으로 바꾸니 맞다고 나온다 아마 큰 수가 들어왔을 때 피보나치 결과가 커져 인트형을 넘은 것 같다.