[백준]1003 피보나치 함수

서은경·2022년 11월 27일
0

CodingTest

목록 보기
39/71

실버1,2는 너무 어려워서 자체 단계 하향 ...
피보나치와 똑같은 규칙으로 풀면된다!

package baekjoon;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class Main_1003 {
    static Map<Integer, int[]> map = new HashMap<>();
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int T = Integer.valueOf(br.readLine());
        for (int i = 0; i <= 40; i++) {
            fibonacci((Integer) i);
        }

        StringBuffer sb = new StringBuffer();
        for (int j = 0; j < T; j++) {
            Integer n = Integer.valueOf(br.readLine());
            sb.append(map.get(n)[0]+" "+map.get(n)[1]+"\n");
        }
        System.out.println(sb);
    }
    public static void fibonacci(Integer n) {
        if(n==0 || n==1) {
            map.put(0, new int[]{1, 0});
            map.put(1, new int[]{0, 1});
        } else {
            int cnt0 = map.get(n-1)[0] + map.get(n-2)[0];
            int cnt1 = map.get(n-1)[1] + map.get(n-2)[1];
            map.put(n, new int[]{cnt0, cnt1});
        }
    }
}

피보나치 함수와 똑같은 규칙으로 문제를 풀면 된다.
나는 공책에 하나하나 써서 1과 0이 호출되는 횟수가 n-1과 n-2의 합임을 알아냈고 바로 코드 구현!
뭐든지 다 직접 써서 해보는게 최고인 것 같다..
처음 시간초과는 그냥 피보나치 함수 구현해서 호출될 때마다 ++ 해줬다 ㅎㅎ.. 풀면서도 이게 답일리가 없지.. 하면서도 그냥 해봤다!
암튼 실버3 풀었으니.. 다시 실버1과 2에게 호되게 혼나러 가봐야겠다 ㅠ

0개의 댓글

관련 채용 정보