JAVA 알고리즘

백준 - 11726 [2xn 타일링]

잡다한 저장소 2019. 10. 20. 02:00

https://www.acmicpc.net/problem/11726

 

11726번: 2×n 타일링

2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.

www.acmicpc.net

문제 풀이 

 

마지막이 항상 세로 타일 1개 또는 가로 타일 2개가 올 수 있다.

세로 타일이 왔을 경우는 세로 타일의 길이를 제외하면 n-1,

가로 타일이 왔을 경우는 가로 타일의 길이를 제외하면 n-2 이다.

마지막에 올 수 있는 타일의 형태에 따라 앞의 n-1 또는 n-2의 타일의 경우의 수는 

앞에 구해놓은 dp에서 가져오면 된다.

따라서 점화식을 dp[n] = dp[n-1] + dp[n-2] 로 만들 수 있다.

 

 

import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int[] d = new int[1001];
        d[1] = 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]);
        in.close();
    }
}