백준 15988번(파이썬):1, 2, 3 더하기 3

백준 15988번 문제 정리글 입니다.

문제 출처-https://www.acmicpc.net/problem/15988

문제 내용

백준 15988번

나의 풀이

    T=int(input())
    num=[]
    for i in range(T):
        num.append(int(input()))
        
    dp=[0]*(max(num)+1)
    dp[1],dp[2],dp[3]=1,2,4

    for i in range(T):
        if dp[num[i]]!=0:
            continue
        for j in range(4,num[i]+1):
            if dp[j]!=0:
                continue
            dp[j]=(dp[j-1]+dp[j-2]+dp[j-3])%1000000009

    for i in range(T):
        print(dp[num[i]])
  1. 임의의 정수 n에대해서 d[n]은 n을 1,2,3 의 합으로 만들 수 있는 방법의 수를 1,000,000,009로 나눈 나머지로 정의했다.
  2. n>=4일 때, 점화식 dp[j]=dp[j-1]+dp[j-2]+dp[j-3]을 만족한다.

점화식의 조건과 식을 구해서 해결했지만 시간이 오래걸렸다.

다른 풀이

    T=int(input())
    
    dp=[0,1,2,4]
    l=4
    for i in range(T):
        n=int(input())
        while n>=l:
            dp.append((dp[l-1]+dp[l-2]+dp[l-3])%1000000009)
            l+=1
        print(dp[n])

\(l\)=4라는 임의의 변수를 선언하여 반복문을 통해 4이상의 수만 점화식을 통해 값을 구하도록 더 간단히 구현했다.

입력을 받으며 바로 계산을 한다면 더욱 쉽게 해결할 수 있었다.

참조 링크