728x90
문제: https://www.acmicpc.net/problem/1003
코드: https://github.com/irerin07/AlgorithmStudyBaek/blob/master/src/baekjoon/baekjoon1003.java
package baekjoon;
import java.io.*;
public class baekjoon1003 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int num = Integer.parseInt(br.readLine());
int[] zeroCount = new int[41];
int[] oneCount = new int[41];
zeroCount[0] = 1;
oneCount[0] = 0;
zeroCount[1] = 0;
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 i = 0; i < num; i++){
int a = Integer.parseInt(br.readLine());
bw.write(zeroCount[a] + " " + oneCount[a] + "\n");
}
bw.flush();
br.close();
bw.close();
}
}
문제를 잘못 이해해서 엄청 애먹은 문제
'fibonacci(N)을 호출했을 때, 0과 1이 각각 몇 번 출력되는지 구하는 프로그램을 작성하시오.'
이 문장을 피보나치를 수행했을때 각 연산 결과값에 0과 1이 몇번 나오는지 구하라는 문제로 착각했다.
하지만 몇번을 도전해도 계속 오류가 나서 다른 사람들의 풀이를 보니
fibonacci(N)을 호출 했을 때 fibonacci(0)과 fibonacci(1)이 몇번씩 호출 되는지를 구하는 문제였다.
문제가 요구하는 사항을 이해하니 쉽게 풀린 문제.
40보다 작거나 같은 자연수가 주어지므로 크기 41의 두 배열,
fibonacci(0)을 호출한 횟수를 저장하는 zeroCount,
fibonacci(1)을 호출한 횟수를 저장하는 oneCount 를 만든다.
N |
0 호출 |
1 호출 |
0 |
1 |
0 |
1 |
0 |
1 |
2 |
1 |
1 |
3 |
1 |
2 |
4 |
2 |
3 |
5 |
3 |
5 |
위의 표를 보면 보이겠지만 N단계의 0과 1의 호출횟수는
N단계의 fibonaci(0)호출 횟수 = 0호출(N-1)+0호출(N-2)
N단계의 fibonaci(1)호출 횟수 = 1호출(N-1)+1호출(N-2)
이며
위와 같은 패턴을 바탕으로 코드를 짜서 문제를 해결할 수 있었다.
728x90
'알고리즘' 카테고리의 다른 글
Leet Code 1480 (0) | 2023.07.25 |
---|---|
[백준] N과 M (4) [자바/Java] (0) | 2020.07.19 |
[백준] 피보나치 2 [자바/Java] (0) | 2020.06.07 |
[백준] 크로아티아 알파벳 [Java/자바] (0) | 2020.04.24 |
[백준] 수 정렬하기 - 3 [자바/Java] (0) | 2020.04.16 |