728x90
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
분석
(현재 경우의 수) = (이전 단계의 경우의 수) x (n = 2일 때 경우의 수) + 2
dp[n]
= dp[n-2]*dp[2] + dp[n-4]*2 + dp[n-6]*2 + ... dp[2]*2 + 2
= dp[n-2]*3 + dp[n-4]*2 + dp[n-6]*2 + ... dp[2]*2 + 2
2를 더하는 이유 : 아래와 같은 새로운 모양의 타일이 생김

풀이
def solution(n):
mod = 1000000007
dp=[0]*(n+1)
dp[2]=3
if n>2:
dp[4] = 11
for i in range(6,n+1,2):
dp[i]=dp[i-2]*3 + 2
for j in range(i-4, -1, -2):
dp[i] += dp[j] * 2
dp[i] = dp[i] % mod
return dp[n]
def solution(n):
answer = [0,3,11]
index = int(n/2)
if n % 2 != 0: return 0
if index < 3: return answer[index]
for i in range(3, index+1):
# answer[i:j] -> answer에서 index가 i인 원소부터 j-1인 원소까지의 sub-array
answer.append((3*answer[i-1]+sum(answer[1:i-1])*2+2)%1000000007)
return answer[index]
프로그래머스 - 3xn 타일링 풀이 (python3)
프로그래머스 3xn 타일링의 문제 설명은 여기서 볼 수 있고 풀어볼 수도 있다. 이전에 2xn 타일링 문제를 풀어봤기 때문에 3n 타일링 문제에 도전해보았다. 원리는 비슷하고 조금 응용하면 되겠지.
s2choco.tistory.com
728x90