사용한 것
- 한칸 혹은 두칸을 차지하는 타일로 모두 채우는 경우의 수를 구하기 위한 bottom-up
풀이 방법
- 결국 가로로 한 칸을 차지하거나 두 칸을 차지하는 타일로 채우는 경우의 수를 구하는 문제이다.
- 따라서
d
의 i 번째 값을 구하기 위해 d
의 i-1, i-2를 더한다.
- 문제에 10007로 나눈 나머지를 구하라고 나와있다. 범위 때매 그런가 왜 있는지는 잘 모르겠다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] d = new int[N + 1];
d[1] = 1;
if(N > 1) {
d[2] = 2;
}
for (int i = 3; i <= N; i++) {
d[i] = (d[i - 1] + d[i - 2]) % 10007;
}
System.out.println(d[N] % 10007);
}
}