Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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
Tags
more
Archives
Today
Total
관리 메뉴

forDevLife

[백준] 1003 - 피보나치 함수 본문

알고리즘

[백준] 1003 - 피보나치 함수

JH_Lucid 2021. 6. 18. 14:38

평범한 피보나치로 보이나, 피보나치가 결국은 fib(0), fib(1)로 이루어져 있기 때문에 이 수를 세는게 관건이다.

class를 통해 fib_0, fib_1의 개수를 따로 계산한 후, 배열을 만들어 값이 있으면 리턴, 없으면 만들어서 리턴하는 방식으로 구했다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

class fib_zo {
    int fib_0;
    int fib_1;

    public fib_zo(int fib_0, int fib_1) {
        this.fib_0 = fib_0;
        this.fib_1 = fib_1;
    }
}

public class Main {

    static fib_zo fibo_arr[] = new fib_zo[46];

    public fib_zo fibo(int n) {
        if (n == 0) {
            return fibo_arr[0] = new fib_zo(1, 0);
        } else if (n == 1) {
            return fibo_arr[1] = new fib_zo(0, 1);
        } else {
            if (fibo_arr[n] != null) {
                return fibo_arr[n];
            } else {
                fib_zo tmp1 = fibo(n - 1);
                fib_zo tmp2 = fibo(n - 2);
                int a = tmp1.fib_0 + tmp2.fib_0;
                int b = tmp1.fib_1 + tmp2.fib_1;
                return fibo_arr[n] = new fib_zo(a, b);
            }
        }
    }

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

        int n = Integer.parseInt(br.readLine());
        Main T = new Main();

        while (n-- > 0) {
            int m = Integer.parseInt(br.readLine());
            fib_zo tmp = T.fibo(m);
            sb.append(tmp.fib_0 + " " + tmp.fib_1 + "\n");
        }
        System.out.println(sb);
    }
}

'알고리즘' 카테고리의 다른 글

[백준] 1946 - 신입 사원  (0) 2021.06.29
[백준] 1389 - 케빈 베이컨의 6단계 법칙  (0) 2021.06.29
[백준] 1966 - 프린터 큐  (0) 2021.06.18
[백준] 1874 - 스택수열  (0) 2021.06.18
[백준] 1929 - 소수 구하기  (0) 2021.06.18
Comments