알고리즘
[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()