728x90
https://www.acmicpc.net/problem/11726
11726번: 2×n 타일링
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
www.acmicpc.net
어떤 경우의 수로 나눠서 풀어야할지만 생각하면 간단하지만 이를 생각하기가 어려운 문제였습니다. 마지막에 오는 타일의 모양을 생각하면 쉽게 풀 수 있습니다.
def solution(n):
# DP
memo = [0 for _ in range(n+1)]
# 2까지만 채우기
memo[1] = 1
if n == 1:
return memo[1]
memo[2] = 2
# i 번째 맨 뒤가 = 모양이면
# (i-2) 가지 이고
# i 번째 맨 뒤가 | 모양이면
# (i-1) 가지 이다.
# 나머지를 셈하지 않는 이유는
# 위의 경우의 수로 모두 조합할 수 있기 때문이다.
# 즉 f(i) = f(i-2) + f(i-1) 이다.
i = 3
while True:
# 종료 조건
if i == n+1:
return memo[-1] % 10007
# 점화식
memo[i] = memo[i-2] + memo[i-1]
i += 1
n = int(input())
print(solution(n))
728x90
'Coding Test > BaekJoon_Python' 카테고리의 다른 글
백준 1932 <정수 삼각형> Python (1) | 2023.11.01 |
---|---|
백준 12852 <1로 만들기 2> Python (1) | 2023.11.01 |
백준 11659 <구간 합 구하기 4> Python (0) | 2023.10.31 |
백준 2579 <계단 오르기> Python (1) | 2023.10.30 |
백준 1149 <RGB 거리> Python (1) | 2023.10.30 |