티스토리 뷰

'오르막 수'

코드1

n = int(input())
d = [[0 for i in range(10)] for i in range(n+1)]
d[1] = [1 for i in range(10)]
if n > 1:
    d[2] = [i for i in range(10, -1, -1)]

    for i in range(3, n+1):
        for j in range(10):
            temp = 0
            for k in range(j):
                temp += d[i-1][k]
            d[i][j] = sum(d[i-1]) - temp

print(sum(d[n]) % 10007)

풀이

 
 

dp테이블을 위와 같은 표처럼 2차원으로 구현했다. 블로그 포스팅을 위해 표를 그리다보니 처음에 생각했던 점화식은

d[i][2] = sum(d[i-1]) - (d[i-1][0] + d[i-1][1]) 이런 식이었는데

d[i][2] = d[i][1]-d[i-1][1] 로 풀어서 위의 코드처럼 k 반복문을 돌지 않아도 된다는 것을 알았다.

 

그래서 코드를 아래와 같이 바꿔주었더니 채점 시간이 더 빨라졌다

코드2

n = int(input())
d = [[0 for i in range(10)] for i in range(n+1)]
d[1] = [1 for i in range(10)]
if n > 1:
    d[2] = [i for i in range(10, -1, -1)]

    for i in range(3, n+1):
        for j in range(10):
            if j == 0:
                d[i][j] = sum(d[i-1])
            else:
                d[i][j] = d[i][j-1] - d[i-1][j-1]

print(sum(d[n]) % 10007)

 

'algorithm > 백준' 카테고리의 다른 글

[algorithm] 파이썬 - 백준 11052  (0) 2022.06.11
[algorithm] 파이썬 - 백준 1715  (0) 2022.04.30
[algorithm] 파이썬 - 백준 3671  (0) 2022.04.29
[algorithm] 파이썬 - 백준 1080  (0) 2022.04.27
[algorithm] 파이썬 - 백준 2616  (0) 2022.04.27
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/09   »
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
글 보관함