문제
https://www.acmicpc.net/problem/11727
풀이
n = int(input())
d = [0]*1001
d[1] = 1
d[2] = 3
for i in range(3,1001):
d[i] = (d[i-1] + 2*d[i-2])%10007
print(d[n])
경우의 수를 다 구해보면된다.
- d[n-1]일떄는 2*1 타일이 붙을 수 있다. (d[n]+=d[n-1])
- d[n-2]일때는 1*2 타일 2개, 2*2타일 두개가 붙을 수 있다. d[n-2]의 타일들에 *2를 해주면된다. (d[n]+=d[n-2]*2)
- 이때 2*1 타일 두개는 d[n-1]에 포함되므로 패스한다.
[다른사람 풀이]
a=b=1
for i in range(int(input())):
a,b=b,2*a+b
print(a%10007)
이렇게도 풀 수 있다.
'코딩테스트 > Python' 카테고리의 다른 글
[Python] 백준 #1003 - 피보나치 함수 (0) | 2021.12.13 |
---|---|
[Python] 백준 #9095 - 1, 2, 3 더하기 (0) | 2021.12.12 |
[Python] 백준 # 11726 - 2×n 타일링 (0) | 2021.12.12 |
[Python] 백준 #1463 - 1로 만들기 (0) | 2021.12.12 |
[Python] 백준 #2667 - 단지번호붙이기 (0) | 2021.12.12 |