본문 바로가기

코딩 테스트/BAEKJOON

[Java] 11727 2xn 타일링 2

문제

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

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



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

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

문제 풀이

이전에 풀었던 문제의 연장선이다. 이전 문제에서 n - 2의 타일에 붙이는 타일은 2x1타일이 가로로 2개 붙은 형태만 가능했었는데, 타일이 추가되면서 대신 2x2타일도 가능하게 된 것을 알 수 있다.

 

점화식으로 표현하면 dp[n] = dp[n-1] + (2 * dp[n-2])가 된다. 

 

각 DP를 계산할 때 10007을 나머지연산 해주는 것도 잊지 말아야한다.

 

[Java] 11729 2xN 타일

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

yatanox.tistory.com

 

자바 코드

import java.util.Scanner;

public class N11727 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        sc.nextLine();

        int[] dp = new int[1001];
        dp[1] = 1;
        dp[2] = 3;

        for(int i = 3; i <= n; i++){
            dp[i] = (dp[i - 1] + (2 * dp[i - 2])) % 10007;
        }

        System.out.println(dp[n]);
    }
}

 

'코딩 테스트 > BAEKJOON' 카테고리의 다른 글

[Java] 5525 IOIOI  (0) 2024.05.20
[Java] 1927 최소 힙  (0) 2024.05.20
[Java] 1959 달팽이3  (0) 2024.05.15
[Java] 20056 마법사 상어와 파이어볼  (0) 2024.05.14
[Java] 15558 점프 게임  (0) 2024.05.14