티스토리 뷰
2×n 직사각형을 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×17 직사각형을 채운 한가지 예이다.
풀이방법
방법은 11726과 거의 동일하다.
먼저, d[n]을 어떻게 나눌 수 있을지 생각해봐야한다.
d[n]은 아래 3가지 경우로 나눌 수 있다.
1. 2x1 블록으로 끝나는 경우
2. 1x2 블록 2개로 끝나는 경우
3. 2x2 블록 1개로 끝나는 경우
위의 3가지 경우를 다르게 표현하면 아래와 같다.
1. d[n-1] 끝에 2x1 블록이 추가되는 경우
2. d[n-2] 끝에1x2 블록 2개가 추가되는 경우
2. d[n-2] 끝에2x2 블록이 추가되는 경우
d[n] = d[n-1] + d[n-2] + d[n-2]
즉, 식은 d[n] = d[n-1] + d[n-2] * 2가 된다.
'알고리즘 > 다이나믹프로그래밍' 카테고리의 다른 글
11726 : 2×n 타일링 (0) | 2017.02.23 |
---|
댓글