DP이지만, 현재 state가 세 가지(왼쪽, 오른쪽에 한 마리만 있는 경우, 한 마리도 없는 경우)인 상대적으로 쉬운 경우이다.
사자가 어느 한쪽에 있는 경우 : 다음 state에는 사자가 한 마리도 없거나 반대쪽에 존재해야만 한다.
사자가 없는 경우 : 다음 state에는 모든 경우의 수가 가능하다.
이를 토대로 구현을 완료하면 끝.
풀이 코드
N = int(input())
MOD = 9901
dp = [[0]*3 for _ in range(N)]
dp[0][0] = dp[0][1] = dp[0][2] = 1
for i in range(N-1) :
for j in range(3) :
if j == 0 :
_range = range(1, 4)
else :
_range = range(1, 3)
for k in _range :
dp[i+1][(j+k) % 3] = (dp[i+1][(j+k) % 3] + dp[i][j]) % MOD
print(sum(dp[-1]) % MOD)