백준 문제 풀이/백준 (JAVA)

JAVA 백준 2748 피보나치 수 2

gamja00 2024. 7. 4. 18:40

 

https://www.acmicpc.net/problem/2748


문제

  1. 첫째 줄에 연산 횟수 n (1 <= n<= 90) 입력
  2. 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으로 바꾸니 맞다고 나온다 아마 큰 수가 들어왔을 때 피보나치 결과가 커져 인트형을 넘은 것 같다.