Algorithm/Baekjoon

[백준]11726 2*n 타일링 파이썬 python

rrojin 2022. 1. 16. 21:14

문제링크

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

 

11726번: 2×n 타일링

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

www.acmicpc.net

코드

1
2
3
4
5
6
7
8
9
10
11
import sys
input = sys.stdin.readline
 
= int(input())
 
= [0]*1001
d[1= 1
d[2= 2
for i in range(3, n+1):
    d[i] = d[i-1+ d[i-2]
print(d[n]%100007)
cs

 

Point

- 다이나믹프로그래밍으로 접근

Overlapping Subproblem & Optimal Substructure 

큰 문제를 작은 문제로 쪼갤 수 있으며 & 큰 문제는 작은 문제의 정답을 통해 계산한다. 

 

- 풀이 방법:

d(n) = 2*n을 채우는 방법의 수
n번째에서 새롭게 할 수 있는 행동은 세로로 1개 배치 or 가로로 2개 배치
세로로 1개 배치하는 상황은 d(n-1)(=n-1개가 채워져있는 상황)에 추가로 새로 1개 배치하는 것과 동일하고
가로로 2개 배치하는 상황은 d(n-2)에 추가로 가로 2개 배치하는 것!!
--> d(n) = d(n-1) + d(n-2) 가 성립, d(1) = 1 , d(2) = 2