-
[java] 백준 알고리즘 1003번 피보나치 함수 풀이알고리즘/백준 알고리즘 2018. 5. 10. 17:59
이 문제를 다른 사람들은 어떻게 풀었는지 봤는데,
이 문제는 어떻게 푸느냐에 따라 정말 다양하게 풀어낼 수 있는 문제 같다.
난 너무 쉽게 생각한걸까.
문제를 잘 들여다보면 return 값에서 해당하는 n에 대해 fibonacci(n-1) + finbonacci(n-2)니까
fibonacci(n)이란 fibonacci(n-1)과 fibonacci(n-2)를 동시에 수행한다는 로직이 성립한다.
그렇다면 fibonacci(n-1)에 해당하는 0이 출력되는 횟수와 1이 출력되는 횟수가 있을 것이고,
fibonacci(n-2)에 해당하는 0이 출력되는 횟수와 1이 출력되는 횟수가 있을 것이다.
그럼 이 두 가지 함수의 0 출력횟수와 1 출력횟수를 합쳐주면 fibonacci(n)에 해당하는
0 출력횟수, 1 출력횟수가 나올 것이다.
각 피보나치 함수마다 나올 0 출력 횟수를 담을 배열과 1 출력 횟수를 담을 배열을 둘로 나누어서 개발했다.
* 소스
1234567891011121314151617181920212223242526272829303132public class Baekjoon1003 {public static void main(String[] args) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(System.in));int t = Integer.parseInt(br.readLine()); // 테스트 케이스의 개수int[] nArray = new int[t];for(int i=0; i<t; i++) {nArray[i] = Integer.parseInt(br.readLine()); // 입력할 값들}int[] zeroCount = new int[41]; // 0~40까지 값이 들어가므로 총 배열의 크기는 41int[] oneCount = new int[41];zeroCount[0] = 1; // fibonacci(0)에 대한 출력횟수는 0은 1회, 1은 0회이다.oneCount[0] = 0;zeroCount[1] = 0; // fibonacci(1)에 대한 출력횟수는 0은 1회, 1은 1회이다.oneCount[1] = 1;for(int j=2; j<41; j++) { // 설명한 로직대로 쭉쭉 값이 들어간다.zeroCount[j] = zeroCount[j-1] + zeroCount[j-2];oneCount[j] = oneCount[j-1] + oneCount[j-2];}for(int k=0; k<nArray.length; k++) {System.out.println(zeroCount[nArray[k]] + " " + oneCount[nArray[k]]); // 입력한 값에 맞춰 담긴 배열에서}}}cs '알고리즘 > 백준 알고리즘' 카테고리의 다른 글
[java] 백준 알고리즘 8393번 합 풀이소스 (0) 2018.05.12 [java] 백준 알고리즘 2439번 별찍기 - 2 풀이 (0) 2018.05.12 [java] 백준 알고리즘 1149번 RGB거리 풀이 (0) 2018.05.10 [java] 백준 알고리즘 2579번 계단오르기 풀이소스 (0) 2018.05.09 [java] 백준 알고리즘 1463번 1로 만들기 풀이 소스 (0) 2018.04.23