백준 1003번 피보나치 함수(java)

마뇽미뇽·2024년 7월 18일
0

알고리즘 문제풀이

목록 보기
87/165

1.문제

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

2.풀이

dp로 풀어 초기값 0일때와 1일때를 설정 후 2부터 n 까지 반복문을 돌린다.

3.오답코드

시간초과가 나왔다.

import java.io.*;

public class Main {
    static int zerocnt;
    static int onecnt;

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

        int t = Integer.parseInt(br.readLine());

        for (int i = 0; i < t; i++) {
            int n = Integer.parseInt(br.readLine());
            zerocnt = 0;
            onecnt = 0;
            fiboNum(n);
            sb.append(zerocnt + " " + onecnt).append("\n");
        }
        System.out.println(sb);
    }

    static int fiboNum(int n) {
        if (n == 0) {
            zerocnt++;
            return 0;
        } else if (n == 1) {
            onecnt++;
            return 1;
        } else {
            return fiboNum(n - 1) + fiboNum(n - 2);
        }
    }
}

4.정답코드

package com.example.baekjoon;

import java.io.*;

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

        int t = Integer.parseInt(br.readLine());

        int dp_zero[] = new int[41];
        int dp_one[] = new int[41];

        //  초기값
        dp_one[0] = 0;
        dp_one[1] = 1;
        dp_zero[0] = 1;
        dp_zero[1] = 0;

        for (int i = 0; i < t; i++) {
            int n = Integer.parseInt(br.readLine());

            for (int j = 2; j <= n; j++) {
                dp_one[j] = dp_one[j - 1] + dp_one[j - 2];
                dp_zero[j] = dp_zero[j - 1] + dp_zero[j - 2];
            }

            sb.append(dp_zero[n] + " " + dp_one[n]).append("\n");
        }
        System.out.println(sb.toString());
    }
}
profile
Que sera, sera

0개의 댓글