QA & Engineering Blog

A Blog about Quality · Automation · Engineering

🏠 홈으로

[Gold I] 책 페이지 - 1019

문제 링크

성능 요약

메모리: 113112 KB, 시간: 116 ms

분류

수학

문제 설명

지민이는 전체 페이지의 수가 N인 책이 하나 있다. 첫 페이지는 1 페이지이고, 마지막 페이지는 N 페이지이다. 각 숫자가 전체 페이지 번호에서 모두 몇 번 나오는지 구해보자.

입력

첫째 줄에 N이 주어진다. N은 1,000,000,000보다 작거나 같은 자연수이다.

출력

첫째 줄에 0이 총 몇 번 나오는지, 1이 총 몇 번 나오는지, ..., 9가 총 몇 번 나오는지를 공백으로 구분해 출력한다.

💡 Solutions

📄 책 페이지.py


N = int(input())
lst = [ 0 for _ in range(10)]

# 0,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
# ...
# 100
def calc(n, ten):
    while (n > 0):
        lst[n%10] += ten
        n //= 10

def solve(A, B, ten):
    while (A% 10 != 0 and A<=B):
        calc(A,ten)
        A += 1
    if (A > B) : return

    while (B% 10 != 9 and B>=A):
        calc(B,ten)
        B -= 1
    cnt = (B // 10 - A // 10 + 1)

    for i in range(10):
        lst[i] += cnt * ten

    solve(A//10, B//10, ten*10)
solve(1, N, 1)
print(*lst)