BOJ 14495 피보나치 비스무리한 수열

LONGNEW·2020년 12월 28일
0

BOJ

목록 보기
11/333

시간 2초, 메모리 512MB
input :

  • n (1 <= n <= 116)
    output :

  • n번째 수 출력
    조건 :

  • f(1) = f(2) = f(3) = 1

  • f(n) = f(n - 1) + f(n - 3)


DP로 3이하일때는 이미 저장되어 있는 1을 리턴하고.
DP에 이미 저장되어 있을 경우엔 DP의 값을.
그렇지 않다면 DP에 점화식을 이용해서 재귀를 걸자.

import sys

n = int(sys.stdin.readline())
dp = [-1] * (n + 1)

def recursion(start):
    if start <= 3:
        dp[start] = 1
        return dp[start]
    if dp[start] != -1:
        return dp[start]
    dp[start] = recursion(start - 1) + recursion(start - 3)
    return dp[start]
recursion(n)
print(dp[n])


재귀를 시키는 부분이 헷갈리네.. 다시 봐야 겠다

0개의 댓글