YataNox
[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을 나머지연산 해주는 것도 잊지 말아야한다.
자바 코드
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 |