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