[ STUDY ]/CodingTest

11727 : 2 x n 타일링2 (DP)

김강니 2024. 11. 24. 00:26

 11727 : 2xn 타일링 2

문제

2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.

아래 그림은 2×17 직사각형을 채운 한가지 예이다.

입력

첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)

 

 

출력

첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.

 

 

문제 풀이

  • 풀어버림.....사실 2xn 첫번째 문제 덕분에 푼 듯..?
  • 점화식 > dp[n-1] + dp[n-2] * 2
  • dp[n-1]은 경우가 하나뿐임 그냥 세로타일 채우기
  • dp[n-2]는 정사각형, 세로두개, 가로두개 이렇게 경우가 3개인데 세로 두개는 dp[n-1]에서 들어가니께 뺀다!

 

실행 코드

import java.util.Scanner;

public class P11727 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        long[] dp = new long[1001];
        dp[1] = 1;dp[2] = 3; dp[3] = 5;
        for(int i = 4; i <= n; i++) {
            dp[i] = (dp[i-2] * 2 + dp[i-1]) % 10007;
        }
        System.out.println(dp[n]);
    }
}

 

12시 넘어서 올릴까.....