문제 링크

<aside> 💡 수학

</aside>

Memory 30616KB Time 60ms Code Length 976B

import sys
input=sys.stdin.readline

def zero(n, size):
    ans = n//10
    for i in range (1,size):
        if n % (10**(i+1)) >= (10**i):
            ans += (n // 10**(i+1)) * (10**i)
        else:
            ans += (n // 10**(i+1)-1) * (10**i) + n %(10**i) + 1
    return ans

def other(n, size, type):
    if n % 10 >= type:
        ans = n//10 + 1
    else:
        ans =  n//10
    for i in range(1, size+1):
        if n % (10**(i+1)) >= (type+1)*(10**i):
            ans += ((n//10**(i+1))+1) * (10**i)
        elif n % (10**(i+1)) < type*(10**i):
            ans += (n//10**(i+1)) * (10**i)
        else:
            ans += (n//10**(i+1)) * (10**i) + n%(10**i) + 1
    return ans

n = int(input())
n_temp = n
n_size = 0
while n_temp >= 10:
    n_temp /= 10
    n_size +=1
print(zero(n, n_size), other(n,n_size,1), other(n,n_size,2), other(n,n_size,3), other(n,n_size,4), other(n,n_size,5), other(n,n_size,6), other(n,n_size,7), other(n,n_size,8), other(n,n_size,9))

이 코드는 사용자로부터 입력받은 숫자 n에 대해 0부터 9까지의 각 숫자가 몇 번 등장하는지를 계산하는 프로그램이다.

먼저, 입력받은 숫자 n의 자릿수를 계산한다. 이후 두 가지 함수, zero와 other를 사용하여 0부터 9까지의 숫자가 각각 몇 번 등장하는지를 계산한다.

zero 함수는 숫자 n에서 0이 몇 번 등장하는지를 계산한다. 이는 n을 10으로 나눈 몫을 초기값으로 설정하고, n의 각 자릿수를 확인하면서 0이 등장하는 경우를 세어준다.

other 함수는 숫자 n에서 특정 숫자(1부터 9까지)가 몇 번 등장하는지를 계산한다. 이는 n을 10으로 나눈 몫을 초기값으로 설정하고, n의 각 자릿수를 확인하면서 해당 숫자가 등장하는 경우를 세어준다.

마지막으로, 각 숫자가 몇 번 등장하는지를 출력한다.