|
" 문제 "
" 아이디어 "
기본 아이디어는 2xn 타일링 (1) 문제와 유사하다.
↓ 2xn 타일링 (1) 문제 풀이
타일링 (1) 과 다른 점은 타일의 가로의 길이가 2인 경우 경우의 수가 2가지가 생긴다는 것이다.
D[n] = 주어진 2 * n 직사각형을 채우는 경우의 수
맨 끝 타일을 1 * 2 타일로 채울 경우 -> D[n-2]
맨 끝 타일을 2 * 2 타일로 채울 경우 -> D[n-2]
맨 끝 타일을 2 * 1 타일로 채울 경우 -> D[n-1]
D[n] = D[n-1] + D[n-2] * 2 (n>=3)
D[n] = 1 (n=1)
D[n] = 3 (n=2)
" 코드 "
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import sys
sys.setrecursionlimit(10000000)
def calc(n):
if n==1: return 1
if n==2: return 3
if m[n] == 0:
m[n] = calc(n-2)*2 + calc(n-1)
return m[n]
n = int(input())
m = [0]*(n+1)
print(calc(n)%10007)
|
cs |
" 참고자료 "
반응형
'알고리즘 > Baekjoon' 카테고리의 다른 글
[ Baekjoon : python ] 백준 11052번 카드 구매하기 - 다이나믹프로그래밍 (0) | 2021.02.21 |
---|---|
[ Baekjoon : python ] 백준 9095번 1, 2, 3 더하기 - 다이나믹프로그래밍 (0) | 2021.02.20 |
[ Baekjoon : python ] 백준 11726 2xn 타일링 - 다이나믹프로그래밍 (0) | 2021.02.20 |
[ Baekjoon : python ] 백준 2021 1로 만들기 - 다이나믹 프로그래밍 (재귀호출) (0) | 2021.02.20 |
[ Baekjoon : python ] 백준 3085 사탕게임 - 브루트포스 (0) | 2021.02.20 |