취준/코딩테스트

백준 11057 (python): 오르막 수

린구 2024. 2. 1. 22:57
반응형

 

n = int(input())
dp = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

# 두 자리 수일 땐  10  9  8  7  6  5  4 3 2 1 더했음
# 세 자리 수일 땐  55 45 36 28 21 15 10 6 3 1
# 네 자리 수일 땐 220 ...
# 패턴이 있다. 기존 dp[i-1]을 빼주면 된다.

newdp = [0 for i in range(10)]

for i in range(3, n+1):
    for j in range(10):
        if j == 0:
            newdp[j] = sum(dp)
        else:
            newdp[j] = newdp[j-1] - dp[j-1]
    dp = newdp[:] 
    # 배열의 깊은 복사 주의하기 ^^
    
if n == 1:
    print(10%10007)
else:
    print(sum(dp)%10007)

 

dp는 패턴을 찾아야 한다 ! ! ! 

그리고 메모리 제한이 있을 땐 재사용하자 -,-

 

반응형