백준(JAVA) 풀이/다이나믹 프로그래밍

백준(JAVA) 1003번 피보나치 함수 풀이

개발윗미 2022. 9. 15. 11:30

Java으로 구현한 1003번 피보나치 함수 문제 풀이입니다.

 

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

 

1003번: 피보나치 함수

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

www.acmicpc.net


import java.util.*;
import java.io.*;

public class Main {
	static List<Integer> zero = new ArrayList<>();
	static List<Integer> one = new ArrayList<>();
	
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int t = Integer.parseInt(br.readLine());
		zero.add(1);
		zero.add(0);
		zero.add(1);
		one.add(0);
		one.add(1);
		one.add(1);
		
		for (int i=0; i<t; i++) {
			int n = Integer.parseInt(br.readLine());
			fibo(n);
		}
	}
	
	public static void fibo(int num) {
		int len = zero.size();
		
		if (num >= len) {
			for (int i=len; i<=num; i++) {
				zero.add(zero.get(i-1) + zero.get(i-2));
				one.add(one.get(i-1) + one.get(i-2));
			}
		}
		
		System.out.println(zero.get(num) + " " + one.get(num));
	}
}

 

1. 입력받은 num의 zero 사용 개수는 zero[i-1] + zero[i-2]와 같다.

0일때 : 1개
1일때 : 0개
2일때 : 1개
3일때 : 1개

 

2. 마찬가지로 num의 one 사용 개수는 one[i-1] + one[i-2]와 같다.

0일때 : 0개
1일때 : 1개
2일때 : 1개
3일때 : 2개

 

3. 따라서 구하고자 하는 대상(num)이 현재의 zero 개수보다 클 경우 length부터 num까지 각 zero의 개수, one의 개수를 구하여 각 리스트에 추가한다.

 

4. 최종적으로 num을 대상으로 사용한 zero의 개수, one의 개수를 출력한다.