2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
import java.util.Scanner;
// 2*n 타일링
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] f = new int[10001];
f[1] = 1; // 2*1 일때
f[2] = 2; // 2*2 일때
System.out.println(fibo(f, n) % 10007);
}
public static int fibo(int[] f, int n) {
if (f[n] != 0) {
return f[n];
} else {
// | 와 = 가 앞에 온 경우로 나눠서 생각할 수 있다
// | 가 앞에 온 경우 n-1의 경우의 수
// = 가 앞에 온 경우 n-2의 경우의 수
f[n] = fibo(f, n - 1) % 10007 + fibo(f, n - 2) % 10007;
return f[n];
}
}
}