https://www.acmicpc.net/problem/11726
[문제]
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
[입력 조건]
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
[코드]
import java.util.*;
public class BaekJoon_11726 {
static Integer[] dp;
static int n;
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
dp=new Integer[n+1];
dp[0]=dp[1]=1;
System.out.println(dynamic(n));
}
/*
* 동적 계획법
* n=1일 경우 1
* n=2일 경우 2
* n=3일 경우 3
* n=4일 경우 5
* ...
*
* 점화식은 dp[n] = dp[n-2] + dp[n-1]이 된다.
*/
public static int dynamic(int n) {
if(dp[n]==null) {
dp[n]=(dynamic(n-2)+dynamic(n-1))%10007;
}
return dp[n];
}
}
[고찰]
이번 문제는 동적 계획법 문제였다. 이전에 풀어봤던 동적 계획법 문제와 비슷해 우선 규칙을 찾기 위해 n이 5일때까지 그림을 그려 경우의 수를 세보았다. 그랬더니 dp[n] = dp[n-2] + dp[n-1]이라는 규칙을 쉽게 찾을 수 있었다. 이 점화식을 동적 계획법을 사용하여 구현하는 것 또한 어렵지 않게 해결할 수 있었다.
'백준' 카테고리의 다른 글
[백준_18352번] 특정 거리의 도시 찾기 (0) | 2021.08.07 |
---|---|
[백준_11727번] 2Xn 타일링 2 (0) | 2021.08.07 |
[백준_11052번] 카드 구매하기 (0) | 2021.08.07 |
[백준_6588] 골드바흐의 추측 (0) | 2021.08.06 |
[백준_2485번] 가로수 (0) | 2021.08.05 |