티스토리 뷰

반응형

파도반수열…?


개념이 조금 낯설 뿐, 피보나치와 비슷하다는 힌트를 보고 자연스럽게 점화식?을 생각하게 되었다.

하지만! 그냥 늘어진 숫자만 보고서 어떤 규칙을 찾는담? 하고 막막한 생각이 들었다.

# 직접적인 관계 찾아보기
P(4) = P(1) + P(3)
P(5) = P(4)
P(6) = P(5) + P(3)
P(7) = P(6) + P(2)
P(8) = P(7) + P(1)

결국


직접적인 관계는 아니지만! 간접적인 관계가 있음을 확인할 수 있었다.

n > 5에서는, P(n) = P(n-5) + P(n-1)

DP와 메모이제이션을 이용해서 구현하기


피보나치 수열도 마찬가지로, 이미 구한 값을 또! 재귀로 호출할 필요 없이 메모이제이션을 사용해서,

한 번 부른 값을 기억해두면 시간초과를 막을 수 있다.

import sys
# 결국 파도반 수열은 P(n) = P(n-1) + P(n-5)
waves = [0]*101
waves[1] = 1
waves[2] = 1
waves[3] = 1
waves[4] = 2
T = int(sys.stdin.readline().rstrip())
def wave(n):
    if n < 5:
        return waves[n]
    if waves[n] == 0:
        waves[n] = wave(n-1) + wave(n-5)
    return waves[n]

for tc in range(T):
    N = int(sys.stdin.readline().rstrip())
    print(wave(N))

Uploaded by N2T

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함