티스토리 뷰

import java.io.*;

class Main{
static long[] dZero;
static long[] dOne;
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringBuffer stringBuffer = new StringBuffer();
int cases = Integer.parseInt(in.readLine());
int[] values = new int[cases];
for(int i=0;i<cases;++i)
values[i] = Integer.parseInt(in.readLine());
for(int i=0;i<cases;++i) {
int value = values[i];
dZero = new long[value+1];
dOne = new long[value+1];
stringBuffer.append(solve0(value));
stringBuffer.append(" ");
stringBuffer.append(solve1(value));
stringBuffer.append("\n");
}
System.out.println(stringBuffer);
in.close();
}

static long solve0(int n) {
if(n == 0)
return 1;
else if(n == 1)
return 0;
else if(dZero[n] > 0)
return dZero[n];
dZero[n] = solve0(n-1) + solve0(n-2);
return dZero[n];
}

static long solve1(int n) {
if(n == 0)
return 0;
else if(n == 1)
return 1;
else if(dOne[n] > 0)
return dOne[n];
dOne[n] = solve1(n-1) + solve1(n-2);
return dOne[n];
}
}



피보나치 수를 구하는 과정을 써내려가다 보면 0과 1의 빈도수에도 피보나치 수를 구하는 과정과 비슷하다는 것을 알 수 있다.


0과 1 각각에 대한 경우를 저장할 배열을 만들고 다이나믹 프로그래밍을 푸는 방법을 적용하였다.

'Algorithm > Baekjoon Online Judge' 카테고리의 다른 글

11053번 '가장 긴 증가하는 부분 수열'  (0) 2018.07.29
2748번 '피보나치 수 2'  (0) 2018.04.29
2193번 '이친수'  (0) 2018.04.14
11052번 '붕어빵 판매하기'  (0) 2018.04.13
9095번 '1, 2, 3 더하기'  (0) 2018.04.13
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함