Notice
Recent Posts
Recent Comments
Link
«   2025/03   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Tags
more
Archives
Today
Total
관리 메뉴

끄적끄적

백준 11726 [2×n 타일링] -dp 본문

코테준비

백준 11726 [2×n 타일링] -dp

alstj_성공 2021. 9. 27. 11:57

출처 : https://www.acmicpc.net/problem/11726

 

11726번: 2×n 타일링

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

www.acmicpc.net

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 256 MB 90610 33963 24760 35.232%

문제

2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.

아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.

입력

첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)

출력

첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.

예제 입력 1

2

예제 출력 1 

2

예제 입력 2 

9

예제 출력 2 

55

출처

알고리즘 분류

 

n일 때 나올 수 있는 경우의 수는 n-1일때와 n-2일 때를 더한 값과 같다.

그래서 적용해보면 dp[0]=1, dp[1]=2, dp[2]=3, dp[3]=5 이렇게 나와야한다.

근데 dp[3](그니까 4일 때)이 왜 5가 나오는지 잘 이해가 안되었는데,

(4이면 1과3, 2와2로 나뉘니까 1과3은 3일 때 경우의 수를 적용하는게 이해가 되었는데, 2와2일때는 왜 2의 경우의수가 적용되는지 잘 몰랐었다. 2와 2일 때는 2의 경우의 수의 2배가 되어야하지 않나 싶었다.)

근데 직접 따져보니 겹치는 경우가 존재하여 결국 5가지가 나오는 것을 볼 수 있었다.

 

따라서 dp[n]=dp[n-1]+dp[n-2]가 적용되게 된다.