2xn 타일링 문제와 다르게, 2x2 타일이 추가되었다.
다이나믹 프로그래밍
dp[i] = dp[i-1] + 2 * dp[i-2]
추가되는 타일은 왼쪽에 붙는다고 생각해보면, dp[i-1]에서 1 길어지는 경우 (빨강), dp[i-2]에서 2 길어지는 경우 (파랑)을 고려하면 된다.
길이가 3인 경우의 수
길이가 4인 경우의 수
N = int(input())
lst = [0] * (N+1)
if N == 1:
print(1)
exit()
elif N == 2:
print(3)
exit()
lst[1] = 1
lst[2] = 3
for i in range(3, N+1):
lst[i] = lst[i-1] + lst[i-2] * 2
ans = lst[-1]
if ans > 10007:
print(ans % 10007)
else:
print(ans)