알고리즘 문제 풀이

백준 11727 2Xn 타일링2 (JAVA 자바)

superbono 2021. 7. 25. 23:14

 

문제 출처 - https://www.acmicpc.net/problem/11727

 

11727번: 2×n 타일링 2

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

www.acmicpc.net

 

문제

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

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

 

입력

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

 

출력

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

 

문제 유형

다이나믹 프로그래밍(DP)

 

코드

import java.util.Scanner;

public class BJ11727_2Xn타일링2 {
	static int N;
	static int res[];
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		N = sc.nextInt();
		
		res = new int [1001];
		res[1] = 1;
		res[2] = 3;
		res[3] = 5;
		
		for (int i = 4; i <= N; i++) {
			res[i]= res[i - 1] + (res[i - 2] * 2) ;
			res[i] %= 10007;
		}
		System.out.println(res[N]);
	}
}

 

2Xn 타일링1과 유사한 문제지만 다른 점은 2X2 타일로도 구성할 수 있다는 점이 있다. 따라서 그 전전 타일을 만들 수 있는 방법이 2배가 되는 거니까 *2만 해주면 된다. 다이나믹 프로그래밍은 쉬운 문제는 진짜 쉬운데 어려운 문제는 손도 못대겠다... 꾸준히 열심히 풀다보면 언젠가 풀 수 있겠지 더 열심히 해야겠다 화이팅!