백준 9461 파도반 수열

5008 단어 백준백준

https://www.acmicpc.net/problem/9461

앞 dp 문제들을 풀어보니 이건 엄청 쉽게 느껴진다.
이건 그냥 N이 5이상이 되면 [N-1] + [N-5] 한게 값이 된다.

T = int(input())
dp = [0] * 101
dp[0] = 1
dp[1] = 1
dp[2] = 1
dp[3] = 2
dp[4] = 2
dp[5] = 3
dp[6] = 4
dp[7] = 5
dp[8] = 7
dp[9] = 9

for _ in range(T):
    N = int(input())
    if N < 11:
        print(dp[N-1])
    else:
        for i in range(10, N):
            dp[i] = dp[i-1] + dp[i-5]
        print(dp[N-1])

처음에는 append로 했었는데 자꾸 이상하게 결과가 나와서 왜그런가 고민을 해봤다. 그 결과 append로 하면 리스트가 영구히 바뀌게 되고, 수가 중복append되는 현상이 일어난다는걸 알았다.
dp는 값을 중복해서 계산하지 않으려는 것이기 때문에 append를 쓰면 안되고 이렇게 해야 한다는것을 깨달았다.

좋은 웹페이지 즐겨찾기