9월에 몇 번 풀었다 실패한 문제다. 며칠 전까지 계속 틀려서 총 8번을 틀렸는데, 대부분이 시간 초과였다.
예전에는 재귀로 풀어도 AC를 받은 것 같은데 지금은 안 되는 걸 보니 시간 제한이 바뀌었나 봄. 그래서 메모이제이션으로 풀었다.
처음에는 그냥 단순하게 전역으로 zero, one 변수를 선언하고 0일 때, 1일 때 각각 zero, one 값을 증가하는 방식으로 풀었다. 당연 틀림 ㅋㅋ. 이렇게 하면 안 된다. 내가 문제 제대로 이해 못하기도 했고… 아무튼 여기서 삽질 진짜 많이 했다.
fibonacci(5)는 fibonacci(4) + fibonacci(3)의 값으로 구할 수 있다. fibonacci(4)의 0과 1의 개수는 각각 2 3, fibonacci(3)의 0과 1의 개수는 1 2다. 따라서 fibonacci(5)는 그 둘을 더한 3 5가 된다. 참고로 fibonacci(4) = 3, fibonacci(5) = 5이다.
결과적으로 0의 개수는 fibonacci(n-1), 1의 개수는 fibonacci(n)일 때 구할 수 있다.
publicstaticvoidmain(String args[])throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int T = Integer.parseInt(in.readLine()); for(int i = 0; i < T; i++) { int N = Integer.parseInt(in.readLine()); memo = newint[N + 1];