
이 문제는 이렇게 하면 쉽게 풀 수 있다 라고 알려줄 만한 게 딱히 없다..
그냥 그림을 봐도 규칙이 보이고, 숫자를 봐도 규칙이 보인다..
점화식은 이렇게 된다.
X[N] = X[N-1] + X[N-5]
import java.io.*;
import java.util.*;
public class Main {
private static long[] dp;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// T 입력 받기
int T = Integer.parseInt(br.readLine());
// dp
dp = new long[101];
dp[1] = 1;
dp[2] = 1;
dp[3] = 1;
dp[4] = 2;
dp[5] = 2;
for (int i = 6; i <= 100; i++) {
dp[i] = dp[i - 1] + dp[i - 5];
}
// 출력
for (int i = 0; i < T; i++) {
int N = Integer.parseInt(br.readLine());
System.out.println(dp[N]);
}
}
}
이렇게 출력을 여러 번 해야 할 때는 StringBuilder나 BufferedWriter를 사용하면 시간을 단축할 수 있다!
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
...
bw.write(String.valueOf(dp[N]) + "\n");
...
bw.flush();
bw.close();
int, long 타입을 출력할 때는 String.valueOf()를 사용해야 한다.
bw.write(int)는 정수 값을 ASCII 문자로 출력하기 때문! → bw.write(String.valueOf(dp[N]))
StringBuilder sb = new StringBuilder();
...
sb.append(dp[N]).append("\n");
...
System.out.println(sb);
StringBuilder.append(int), append(long) 는 내부적으로 String.valueOf()를 호출해 변환해 주므로 toString()을 쓸 필요가 없다.