Algorithm
[알고리즘] 백준 11726 2*n타일링(파이썬 풀이)
truewayy
2022. 2. 10. 23:51
728x90
https://www.acmicpc.net/problem/11726
11726번: 2×n 타일링
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.
www.acmicpc.net
문제
2×n 크기의 직사각형을 1×2, 2×1 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.
아래 그림은 2×5 크기의 직사각형을 채운 한 가지 방법의 예이다.

입력
첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)
출력
첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.
해결코드
n = int(input())
li = [0 for _ in range(n+1)]
if n <= 3 : print(n)
else :
li[1] = 1
li[2] = 2
for i in range(3, n+1):
li[i] = li[i-1] + li[i-2]
print(li[i]%10007)
문제풀이
n=1일 때 경우의 수 1
n=2일 때 경우의 수 2
n=3일 때 경우의 수 3
n=4일 때 경우의 수 5 ....
경우의 수가 피보나치 수열과 같은 것을 볼 수 있다.
그렇다면 점화식은 li[n] = li[n-1]+li[n-2] 이다.
코드를 보면 먼저 n에 수를 입력받아준다.
그리고 n+1개 만큼 원소 0을 가진 li라는 리스트를 만들어준다.
n이 1,2,3일 경우에는 어차피 경우의 수도 1,2,3이므로 그대로 출력해주면 되고
n이 그 이상일 경우에는
li[1]과 li[2]를 선언해주고
for문을 3부터 n까지 돌려준다.
그리고 아까 구한 점화식대로 반복문을 돌려주면 원하는 값이 나오는데
그 값을 10007로 나눈 값을 출력해주면 된다.
728x90