개발자-H 입니다.

BOJ - 피보나치 함수 본문

Algorithm/문제 풀이

BOJ - 피보나치 함수

개발자-H 2021. 8. 12. 15:26

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

 

1003번: 피보나치 함수

각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.

www.acmicpc.net

 

  • BOJ - 동적 계획법 1단계 문제집에 수록되어있다.
  • 0, 1각각 배열에 저장하며 피보나치 탐색 시 갱신하였다.
 

동적 계획법 1 단계

i번째 집을 각각의 색으로 칠할 때, 1~i번째 집을 모두 칠하는 최소 비용으로 부분문제를 정의해봅시다.

www.acmicpc.net

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;


public class Main {
    public static final Scanner scanner = new Scanner(System.in);
    public static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    public static int[] memo;

    public static int[] zero;
    public static int[] one;

    public static StringBuilder builder = new StringBuilder();

    public static void main(String[] args) throws Exception {
        int T = scanner.nextInt();

        while (T-- > 0) {
            int N = scanner.nextInt();
            zero = new int[N + 2];
            one = new int[N + 2];
            memo = new int[N + 1];
            Arrays.fill(memo, -1);
            fibonacci(N);
            builder.append(String.format("%d %d\n", zero[N], one[N]));
        }
        System.out.println(builder);
    }

    private static int fibonacci(int N) {
        if (N == 0) {
            zero[N] = 1;
            one[N] = 0;
            return 0;
        }
        if (N == 1) {
            zero[N] = 0;
            one[N] = 1;
            return 1;
        }

        if (memo[N] == -1) {
            memo[N] = fibonacci(N - 1) + fibonacci(N - 2);
            one[N] = one[N - 1] + one[N - 2];
            zero[N] = zero[N - 1] + zero[N - 2];
            return memo[N];
        } else {
            return memo[N];
        }
    }
}

'Algorithm > 문제 풀이' 카테고리의 다른 글

BOJ - 최소비용 구하기  (0) 2021.08.13
BOJ - 파도반 수열  (0) 2021.08.12
BOJ - N과 M (4)  (0) 2021.08.11
BOJ - N과 M (3)  (0) 2021.08.11
BOJ - N과 M (2)  (0) 2021.08.11
Comments