Preparing Coding Test/Baekjoon
[Java/백준/DP] 1003번: 피보나치 함수
weero
2020. 9. 30. 11:24
문제
1003번: 피보나치 함수
각 테스트 케이스마다 0이 출력되는 횟수와 1이 출력되는 횟수를 공백으로 구분해서 출력한다.
www.acmicpc.net
실패 코드(시간초과)
초과 뜰 것 같긴 했다 ㅎ...
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
class Main{
static long[] zerone = new long[2];
public static long fib(int n) {
if(n==0) {
zerone[0]++;
return 0;
}
if(n==1) {
zerone[1]++;
return 1;
}
return fib(n-1)+fib(n-2);
}
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
for(int i=0; i<n; i++) {
zerone[0] = 0;
zerone[1] = 0;
int number = Integer.parseInt(br.readLine());
fib(number);
sb.append(zerone[0]+" "+zerone[1]+"\n");
}
bw.write(new String(sb));
bw.flush();
}
}
성공 코드
N일 때 0의 개수는 N-1의 0 개수 + N-2의 0 개수, 1의 개수는 N-1의 1 개수 + N-2의 1 개수이다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
int[][] zerone = new int[41][2];
zerone[0][0] = 1;
zerone[1][1] = 1;
for(int i=2; i<41; i++) {
for(int j=0; j<2; j++) {
zerone[i][j] = zerone[i-1][j] + zerone[i-2][j];
}
}
for(int i=0; i<n; i++) {
int number = Integer.parseInt(br.readLine());
sb.append(zerone[number][0]+" "+zerone[number][1]+"\n");
}
bw.write(new String(sb));
bw.flush();
}
}