πŸ‹ 문제링크


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

11057번: 였λ₯΄λ§‰ 수

🍎 μ½”λ“œ 제좜 기둝 (λ©”λͺ¨λ¦¬ 및 μ‹œκ°„)


λ©”λͺ¨λ¦¬ : 123172 KB

μ‹œκ°„ : 120 ms

πŸ‰ Code



N = int(input())
dp = [[0 for _  in range(19)] for _ in range(1009)]

dp[1] = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

for i in range(2, N+1):
    for j in range(10):
        if j == 0:
            dp[i][j] = sum(dp[i-1])
        else:
            dp[i][j] = dp[i][j-1] - dp[i-1][j-1]

print(sum(dp[N])%10007)

πŸ₯ λ©”λͺ¨


DP[][] 배열을 2μ°¨μ›μœΌλ‘œ μ„ μ–Έ

DP[x][y] β†’ x : μž…λ ₯으둜 μ£Όμ–΄μ§€λŠ” 숫자 ( = 였λ₯΄λ§‰μˆ˜μ˜ 길이 )

          y : κ°€μž₯ 큰 자리의 숫자
< μ˜ˆμ‹œ >
000    β†’ dp[3][0]
3367 β†’ dp[4][3]

dp[1] λŠ” [1, 1, 1, 1, 1, 1, 1, 1, 1, 1] 으둜 μ΄ˆκΈ°ν™”

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c66c0980-b90a-4cd5-950e-fa0a414c1a86/Untitled.png

μœ„μ˜ 그림에 μ˜ν•΄, dp[k][0] = dp[k-1][0] + dp[k-1][1] + dp[k-1][2] + ... + dp[k-1][9]

                 dp[k][1] =                       dp[k-1][1] + dp[k-1][2] + ... + dp[k-1][9]   

                 dp[k][2] =                                            dp[k-1][2] + ... + dp[k-1][9]      

                  .

                  .

                  .

            dp[k][9] =                                                               ...      dp[k-1][9]

λΌλŠ” κ·œμΉ™μ„ 찾을 수 μžˆμœΌλ―€λ‘œ