알고리즘

[BOJ] 1019 - 책 페이지 (Python)

흙금 2023. 4. 13. 15:05

 

 

아이디어

 

N의 자릿값에 따라 각 숫자가 나오는 횟수를 계산한다.

 

 

풀이

 

def solution():
    N = int(input())
    number = list(map(int, [*str(N)]))[::-1]
    M = len(number)
    res = [0]*10
    for i in range(M-1):
        p = 10**i
        if i == 0:
            res[0] += N//10
        else:
            if number[i] > 0:
                res[0] += (N//(p*10))*p
            else:
                res[0] += (N//(p*10)-1)*p+(N%p+1)
    for i in range(M):
        p = 10**i
        for num in range(1, 10):
            if number[i] > num:
                if i == 0:
                    res[num] += N//10+1
                elif i == M-1:
                    res[num] += p
                else:
                    res[num] += (N//(p*10)+1)*p
            elif number[i] == num:
                if i == 0:
                    res[num] += N//10+1
                elif i == M-1:
                    res[num] += N%p+1
                else:
                    res[num] += (N//(p*10))*p+(N%p+1)
            else:
                if i == 0:
                    res[num] += N//10
                elif i != M-1:
                    res[num] += (N//(p*10))*p
    print(*res)

solution()