Algorithm
[056] 11726. 2xn 타일링
JEE-JEEE
2024. 4. 11. 11:56
✨ 알고리즘 분류 : 다이나믹프로그래밍
https://www.acmicpc.net/problem/11726
11726번: 2×n 타일링
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
www.acmicpc.net
🪡 문제에서 요구하는 조건 정리
- 직사각형 타일 1x2 와 2x1 이 채우는 방법의 수를 구하기
- 출력할 때는 10,007을 나눈 나머지를 출력
🧶 풀이과정
DP는 진짜 나는 어려워서 생각을 많이 해야 했다.
보통 이런 것은 그려보면서 생각을 하는데, 여기에서 같은 점과 계산할 수 있는 부분을 추론하면서 진행을 하게 된다.
이 문제 같은 경우에는
전까지 만들어놓은 타일에서 언제나 현재 n의 자리에서 -1과 -2의 합이 유지된다.
그러니까, -1은 세로 타일이 들어가는 만큼을 추가하는 거고, 2는 가로 타일을 추가하는 것을 생각하면 된다.
세로로 배치하는 타일은 1의 자리를 차지하기 때문에 n-1의 값과 같고
가로로 배치하는 타일은 2의 자리를 차지하기 때문에 n-2의 값과 같다
이것을 토대로 코드를 정리하면 끝
🏹 제출코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] dp = new int[1001];
dp[0] = 0;
dp[1] = 1;
dp[2] = 2;
for(int i = 3; i <= n; i++){
dp[i] = (dp[i - 1] + dp[i - 2]) % 10007;
}
System.out.println(dp[n]);
br.close();
}
}