문제설명
피보나치 함수를 실행할 때 0과 1이 몇번씩 나오는지 출력하는 프로그램입니다.
작동 순서
1. 피보나치 수열을 실행할 숫자를 입력받습니다.
2. 빠른 수행을 위해 메모이제이션을 사용해줍니다.
3. 기존 피보나치 수열 함수와 다른 점은 나오는 숫자를 출력하는게 아닌 0과 1의 출력 횟수를 출력하는 함수입니다.
4. 0과 1의 출력횟수 역시 피보나치 수열이기 때문에 식을 수정해줍니다.
5. 연산이 끝나면 0과 1의 출력횟수를 출력합니다.
소스코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class 백준_1003번_피보나치함수 {
static int[][] memo=new int[41][2];
static int[] fibonacci(int n){
int[] num=new int[2];
if(n==0){
num[0]=1;
num[1]=0;
return num;
}
else if(n==1){
num[0]=0;
num[1]=1;
return num;
}
else {
if(memo[n][0]==0 && memo[n][1]==0) {
num[0] = fibonacci(n - 1)[0] + fibonacci(n - 2)[0];
num[1] = fibonacci(n - 1)[1] + fibonacci(n - 2)[1];
memo[n][0]=num[0];
memo[n][1]=num[1];
}
else{
num[0]=memo[n][0];
num[1]=memo[n][1];
}
return num;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int N=Integer.parseInt(br.readLine());
for(int i=0;i<N;i++) {
int[] fibonacci = fibonacci(Integer.parseInt(br.readLine()));
System.out.printf("%d %d\n", fibonacci[0], fibonacci[1]);
}
}
}
후기
처음에는 많이 헤맸었는데 0과 1의 실행 횟수에도 규칙이 있는 걸 알고 나서는 굉장히 쉽게 풀 수 있었습니다.