[백준/1003] 피보나치 함수 (실버 3) JAVA

jkky98·2024년 4월 22일
0

CodingTraining

목록 보기
37/62

피보나치 함수

피보나치 함수를 구하는 재귀함수 소스를 준다. 이 문제는 피보나치 함수의 재귀적 함수가 호출하는 fibo(0)과 fibo(1)이 몇 번 호출되는지 알아보라는 문제인데, 만약 저기 코드에서 return 0, 1이 되기전에 count변수를 줘서 countZero, countOne에 호출될 때 마다 숫자를 쌓아가게 되면 시간초과 에러가 뜰 것이다.(내가 그랬다.) fibo(40)을 구한다고 하면 시간이 꽤 걸리기 때문이다. 계산상의 중복을 메모리를 이용해 없애줘야 한다. fibo(40)은 fibo(39)의 fibo(38)의 결과를 알고 있다면 그 두 결과를 더해주면 된다. 즉 for문을 통해 40까지 dp를 활용해 쌓아나가면 시간절약이 가능하다.

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

            for (int i=0; i<n; i++) {
                int num = sc.nextInt();
                if (num == 0) {
                    System.out.println("1 0");
                }
                else if (num == 1) {
                    System.out.println("0 1");
                }
                else {
                    int[][] dp = new int[num+1][2];
                    dp[0][0] = 1;
                    dp[0][1] = 0;
                    dp[1][0] = 0;
                    dp[1][1] = 1;
                    for (int j=2; j<=num; j++) {
                        dp[j][0] = dp[j-1][0] + dp[j-2][0];
                        dp[j][1] = dp[j-1][1] + dp[j-2][1];
                    }
                    System.out.println(dp[num][0] + " " + dp[num][1]);


                }
            }
    }
}
profile
자바집사의 거북이 수련법

0개의 댓글

관련 채용 정보