문제 출처 - https://www.acmicpc.net/problem/11727
문제
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만 해주면 된다. 다이나믹 프로그래밍은 쉬운 문제는 진짜 쉬운데 어려운 문제는 손도 못대겠다... 꾸준히 열심히 풀다보면 언젠가 풀 수 있겠지 더 열심히 해야겠다 화이팅!
'알고리즘 문제 풀이' 카테고리의 다른 글
백준 20493 세상은 하나의 손수건 (JAVA 자바) (0) | 2021.07.31 |
---|---|
백준 2589 보물섬(JAVA 자바) (0) | 2021.07.31 |
BJ1149 RGB 거리(JAVA 자바) (0) | 2021.07.24 |
백준 1753 최단경로 (JAVA 자바) (0) | 2021.07.20 |
백준 1987 알파벳 (JAVA 자바) (0) | 2021.07.16 |