파게로그

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

콤퓨타 왕왕기초/PS

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

파게 2020. 11. 22. 14:13

문제 링크: 1003번 제목

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

 

howManyCall(n)fibonacci(n)fibonacci(0)fibonacci(1)을 몇 번 호출했는지를 return한다.

 

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

class Cnt {
    int cnt0;
    int cnt1;

    Cnt(int cnt0, int cnt1) {
        this.cnt0 = cnt0;
        this.cnt1 = cnt1;
    }

    public int[] getAll() {
        int[] arr = new int[2];
        arr[0] = cnt0; arr[1] = cnt1;
        return arr;
    }

    public String toString() {
        return Integer.toString(cnt0) + " " + Integer.toString(cnt1);
    }
}

public class Main {
    static Cnt[] cntArr;

    public static Cnt howManyCall(int n) {
        if (cntArr[n] != null) return cntArr[n];

        int[] arr1 = howManyCall(n-1).getAll();
        int[] arr2 = howManyCall(n-2).getAll();
        int cnt0 = arr1[0]+arr2[0];
        int cnt1 = arr1[1]+arr2[1];
        Cnt newCnt = new Cnt(cnt0, cnt1);
        cntArr[n] = newCnt;

        return newCnt;
    }

    public static void main(String[] args) throws IOException {
        cntArr = new Cnt[41];
        cntArr[0] = new Cnt(1, 0);
        cntArr[1] = new Cnt(0, 1);

        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        int t = Integer.parseInt(bf.readLine());

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < t; i++) {
            int n = Integer.parseInt(bf.readLine());
            sb.append(howManyCall(n).toString());
            sb.append('\n');
        }
        System.out.print(sb);
    }
}
Comments