알고리즘 문제
[백준] 1003번 피보나치 함수
feelcoding
2020. 1. 4. 18:32
728x90
https://www.acmicpc.net/problem/1003
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] zero = new int[41];
int[] one = new int[41];
zero[0] = 1;
one[0] = 0;
zero[1] = 0;
one[1] = 1;
for(int i = 2; i <= 40; i++) {
zero[i] = zero[i - 2] + zero[i - 1];
one[i] = one[i - 2] + one[i - 1];
}
for(int i = 0; i < n; i++) {
int num = in.nextInt();
System.out.print(zero[num] + " " + one[num]);
System.out.println();
}
}
}
제한시간이 0.25초이기 때문에 재귀함수로 직접 호출해서 호출될 때마다 count를 늘리는 방식으로는 할 수 없다.
따라서 동적 계획법을 사용해야하는데 그러기 위해서 규칙성을 찾았다.
fibonacci(0)은 fibonacci(0)을 1번, fibonacci(1)을 0번 호출한다.
fibonacci(1)은 fibonacci(0)을 0번, fibonacci(1)을 1번 호출한다.
그 다음부터는 호출하는 횟수가 피보나치 수열대로 간다.
즉 앞의 두 개의 호출 횟수를 더한 것이 호출 횟수가 된다.
728x90