Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

스테코더

#10870 피보나치 수 5 본문

Algorithm/BOJ

#10870 피보나치 수 5

print("스테코더") 2022. 11. 15. 14:42

피보나치 수 5

10870

문제 풀이 전략

💡 fibo[1] = fibo[2] = 1; 과 같이 base case를 작성하면 0을 입력했을 때 런타임에러(ArrayIndexOfBound)가 발생함

코드

  • Dynamic Programming으로 풀었을 경우 (재귀보다 메모리 사용량 적음)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public 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[] fibo = new int[n + 1];

        for (int i = 0; i <= n; i++) {
            if (i == 0) fibo[i] = 0;
            else if (i == 1 || i == 2) fibo[i] = 1;
            else fibo[i] = fibo[i - 1] + fibo[i - 2];
        }

        System.out.println(fibo[n]);

        br.close();
    }
}
  • 재귀로 풀었을 경우
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class no_10870 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int n = Integer.parseInt(br.readLine()); // 몇 번째 피보나치 수
        System.out.println(calcFibo(n));

        br.close();
    }

    public static int calcFibo(int n) {
        if (n == 0) return 0;
        else if (n == 1 || n == 2) return 1;
        else return calcFibo(n - 1) + calcFibo(n - 2);
    }
}

'Algorithm > BOJ' 카테고리의 다른 글

#14888 연산자 끼워넣기  (0) 2022.11.17
#10818 최소, 최대  (0) 2022.11.15
#2501 약수 구하기  (0) 2022.11.15
#2609 최대공약수와 최소공배수  (0) 2022.11.12
#1312 소수  (0) 2022.11.06
Comments