반응형
https://www.acmicpc.net/problem/1793
풀이
N번째 타일을 채우는 방법 = N-1 타일에 1*2 타일 추가 + N-2 타일에 2*2 타일을 추가하는 방법이다.
N-1번째 타일에 1칸을 추가하면 1*2 타일을 붙이는 방법 밖에는 없다.
그리고 N-2번째 타일에서 2*2 타일을 붙이는 방법은 3가지이지만 || 모양으로 붙이는 방법은 (N-1에 1*2 추가하기)와 겹치므로 N-2번째 타일에 ㅁ, = 모양을 추가하는 방법 수를 더하면된다.
그래서 점화식은
memo[i] = memo[i-1] + (memo[i-2] * 2)
가 된다.
def DP(n):
if n == 0 or n == 1 : return 1
memo = [0 for _ in range(n+1)]
memo[0], memo[1] = 1, 1
for i in range(2, n+1):
memo[i] = memo[i-1] + (memo[i-2] * 2)
return memo[n]
try :
while True:
print(DP(int(input())))
except:
pass
728x90
반응형
'개발 > Algorithm 문제 풀이' 카테고리의 다른 글
[C++, Python] Trie - 2020 카카오 : 가사 검색 (0) | 2020.09.09 |
---|---|
[Python] 2133 타일 채우기 (0) | 2020.09.02 |
[Python] 비트마스킹 정리 (0) | 2020.08.28 |
선택 안됨 [Python] 비트마스킹 - 11723 집합 (0) | 2020.08.28 |
[Python] 비트마스킹 - 1094 막대기 (0) | 2020.08.28 |