실버1,2는 너무 어려워서 자체 단계 하향 ...
피보나치와 똑같은 규칙으로 풀면된다!
package baekjoon;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
public class Main_1003 {
static Map<Integer, int[]> map = new HashMap<>();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.valueOf(br.readLine());
for (int i = 0; i <= 40; i++) {
fibonacci((Integer) i);
}
StringBuffer sb = new StringBuffer();
for (int j = 0; j < T; j++) {
Integer n = Integer.valueOf(br.readLine());
sb.append(map.get(n)[0]+" "+map.get(n)[1]+"\n");
}
System.out.println(sb);
}
public static void fibonacci(Integer n) {
if(n==0 || n==1) {
map.put(0, new int[]{1, 0});
map.put(1, new int[]{0, 1});
} else {
int cnt0 = map.get(n-1)[0] + map.get(n-2)[0];
int cnt1 = map.get(n-1)[1] + map.get(n-2)[1];
map.put(n, new int[]{cnt0, cnt1});
}
}
}
피보나치 함수와 똑같은 규칙으로 문제를 풀면 된다.
나는 공책에 하나하나 써서 1과 0이 호출되는 횟수가 n-1과 n-2의 합임을 알아냈고 바로 코드 구현!
뭐든지 다 직접 써서 해보는게 최고인 것 같다..
처음 시간초과는 그냥 피보나치 함수 구현해서 호출될 때마다 ++ 해줬다 ㅎㅎ.. 풀면서도 이게 답일리가 없지.. 하면서도 그냥 해봤다!
암튼 실버3 풀었으니.. 다시 실버1과 2에게 호되게 혼나러 가봐야겠다 ㅠ