문제 : www.acmicpc.net/problem/11726
11726번: 2×n 타일링
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
www.acmicpc.net
풀이
dp에 2x1부터 경우의 수를 입력한 뒤 입력된 수를 참고하여 다음 2xn 크기의 타일링을 계산한다.
현재 주어진 타일로 겹치지 않게 가장 작게 사각형을 채우는 방법은
①세로 타일 하나로 2x1 만들기 ②가로 타일 두개로 2x2 만들기 이다.
ex) 세로 타일 두개로 2x2를 만드는 경우는 ①의 경우에 속하므로 겹치는 경우이다.
따라서 2xn 타일링 경우의 수는 [ 2x(n-1)에 ①을 붙이는 경우 + 2x(n-2)에 ②를 붙이는 경우 ]이다.
n = int(input())
dp = [0,1,2]
for i in range(3,n+1):
dp.append((dp[i-2] + dp[i-1])%10007)
print(dp[n])
'알고리즘 풀이 > 백준' 카테고리의 다른 글
백준 2156번 : 포도주 시식 (Python) (0) | 2021.02.04 |
---|---|
백준 11053 : 가장 긴 증가하는 부분 수열 (Python) (0) | 2021.02.04 |
백준 1003번 : 피보나치 함수 (Python) (0) | 2021.02.04 |
백준 1541번 : 잃어버린 괄호 (Python) (0) | 2021.02.04 |
백준 2667번 : 단지번호붙이기 (0) | 2021.02.03 |