문제 정보

풀이

수열 값을 보면 다음과 같다.

  • P(1) = P(2) = P(3) = 1
  • P(4) = P(5) = 2
  • P(6) = 3
  • P(7) = 4
  • P(8) = 5
  • P(9) = 7
  • P(10) = 9
  • P(11) = 12
  • P(12) = 16
  • P(13) = 21
  • P(14) = 28

여기서 P(6) = P(5) + P(1), P(7) = P(6) + P(2), … 로, 점화식은 P(i) = P(i - 1) + P(i - 5) 임을 알 수 있다. 꼭 수열 값이 아니더라도, 그림을 통해서도 알 수 있다.

하나 주의해야 하는 점은 int 배열을 사용할 경우 오버플로우가 발생하기 때문에 long 배열을 사용해야 한다.

코드

import java.io.*;
import java.util.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int t = Integer.parseInt(br.readLine());
        
        long[] dp = new long[101];
        dp[1] = dp[2] = dp[3] = 1;
        dp[4] = dp[5] = 2;
        
        int idx = 6;
        for (int i = 0; i < t; i++) {
            int n = Integer.parseInt(br.readLine());
            
            for (;idx <= n; idx++)
                dp[idx] = dp[idx - 1] + dp[idx - 5];
            
            System.out.println(dp[n]);
        }
    }
}