알고리즘

[Java]백준 11726번 2Xn 타일링(Dynamic Programming)

태풍사랑 2020. 5. 8. 22:57

www.acmicpc.net/problem/11726

 

11726번: 2×n 타일링

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

www.acmicpc.net

 

풀이


2 x n 직사각형을 2x1 과 1x2 사이즈의 타일로 채우는 방법의 경우의 수를 찾는 문제이다

   

1. n = 1일 경우 2x1 타일 한개 배치

2. n = 2일 경우 2x1 타일 2개 or 1x2 타일 2개 배치 

3. n = 3일경우 n =1 일 경우와 n = 2 일 경우의 타일 배치 이용하여 새로운 모양 등장 x

 => n이 3일 경우 -> n이 1일 경우 + n이 2일 경우

  ∴ dp[i] = dp[i-1] + dp[i-2]

 

 

public class algo_11726_dp {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int n = sc.nextInt();
		int dp[] = new int[n+1];
		
		dp[1] = 1;
		
		//런타임 에러 방지??
		if(n>=2) dp[2]=2;
		
		for(int i = 3; i<=n; i++) {
			dp[i] = dp[i-1] + dp[i-2];
			dp[i] = dp[i] % 10007;  //
		}
		
		System.out.println(dp[n]);
	}

}