: 가로 n 세로 2 길이의 바닥을 타일로 채우려 한다.
타일은 3가지: 1x2, 2x1, 2x2
바닥을 채우는 경우의 수 % 796796 출력하시오
import sys
input = sys.stdin.readline
n = int(input())
# 타일길이가 n일때 index n까지 나타내기 위해
# 리스트의 길이를 n + 1까지 설정
d = [0] * (n + 1)
def bottom(x):
# 타일 길이가 1, 2 일 때 값 설정
d[1] = 1
d[2] = 3
# 이미 계산이 존재하는 경우, 그 값 반환
if d[x] != 0:
return d[x]
# 타일 최대 길이가 2이기 때문에, 두가지 경우 존재
# 길이가 1 남을땐 경우의 수 1,
# 길이가 2 남을땐 경우의 수 2 -> 따라서 2를 곱함
d[x] = bottom(x - 1) + (bottom(x - 2) * 2)
return d[x]
# 796796을 나눈 나머지 값 출력
print(bottom(n) % 796796)
: d[x] = bottom(x - 1) + (bottom(x - 2) * 2)
으로 수정! 자꾸만 재귀 함수를 헷갈려서 다른걸로 적어버린다 ㄷㄷ d[x-1]로 적을거면, 재귀 함수가 아니지~! 탑다운이 아니지~!
import sys
input = sys.stdin.readline
n = int(input())
# 타일길이가 n일때 index n까지 나타내기 위해
# 리스트의 길이를 n + 1까지 설정
d = [0] * (n + 1)
# 타일 길이가 1, 2 일 때 값 설정
d[1] = 1
d[2] = 3
# index를 n까지 나타내기 위해 range를 n + 1까지 설정
for x in range(3, n + 1):
# 타일 최대 길이가 2이기 때문에, 두가지 경우 존재
# 길이가 1 남을땐 경우의 수 1,
# 길이가 2 남을땐 경우의 수 2 -> 따라서 2를 곱함
d[x] = d[x - 1] + (d[x - 2] * 2)
# 796796을 나눈 나머지 값 출력
print(d[n] % 796796)