문제 설명 및 제한사항
아이디어 및 해결 방법
코드
import sys; sys.setrecursionlimit(1000000)
cache = [-1] * 100001
cache[0] = 1
cache[1] = 1
cache[2] = 3
cumsumcache = [-1] * 100001
def cumulative(n):
# solve(n) + solve(n-3) + ....
if n < 0:
return 0
if cumsumcache[n] != -1:
return cumsumcache[n]
cumsumcache[n] = solve(n) + cumulative(n-3)
return cumsumcache[n]
def solve(n):
if n < 0:
return 0
if cache[n] != -1:
return cache[n]
v = 0
v += solve(n-1) * 1
v += solve(n-2) * 2
v += solve(n-3) * 1
v += 4 * cumulative(n-3) + 2 * cumulative(n-4) + 2 * cumulative(n-5)
cache[n] = v % 1000000007
cumsumcache[n] = cache[n] + cumsumcache[n-3]
return cache[n]
def solution(n):
return solve(n)
Python
복사
출처
프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges