2022 하반기/Python
백준 1019 python
concho
2023. 2. 17. 23:10
https://www.acmicpc.net/problem/1019
1019번: 책 페이지
첫째 줄에 0이 총 몇 번 나오는지, 1이 총 몇 번 나오는지, ..., 9가 총 몇 번 나오는지를 공백으로 구분해 출력한다.
www.acmicpc.net
import sys
input_func = sys.stdin.readline
# count_digits 함수는 숫자 'num'과 숫자 'digit'을 입력받습니다.
# 그리고 1부터 'num'까지의 모든 숫자에서 'digit'이 몇 번 나오는지 계산하여 반환합니다.
def count_digits(num, digit):
# 'digit_count'는 숫자 'num'의 자릿수입니다.
digit_count = len(str(num)) - 1
# 'first_digit'은 숫자 'num'의 첫 번째 숫자입니다.
first_digit = int(str(num)[0])
if digit_count == 0:
if digit > first_digit:
return 0
else:
return 1
# 'result'는 첫 번째 숫자에서 'digit'이 몇 번 나오는지 계산한 결과입니다.
result = first_digit * digit_count * 10**(digit_count-1) + count_digits(num - first_digit * 10**digit_count, digit)
if digit > first_digit:
return result
if digit == first_digit:
return result + (num - first_digit * 10**digit_count + 1)
if digit == 0:
return result + (digit_count - len(str(num - first_digit * 10**digit_count))) * (num - first_digit * 10**digit_count + 1) + 10**digit_count
return result + 10**digit_count
# count_zeros 함수는 숫자 'num'을 입력받아
# 1부터 'num'까지의 숫자 중 0이 몇 번 나오는지 계산하여 반환합니다.
def count_zeros(num):
digit_count = len(str(num)) - 1
result = 0
for i in range(digit_count + 1):
result += 10**i
return result
N = int(input_func().strip())
print(count_digits(N, 0) - count_zeros(N), end=" ")
for i in range(1, 10):
print(count_digits(N, i), end=" ")
(AI 가 대신하는 설명 + 주석도AI가)
이 코드는 1부터 N까지의 숫자에서 각 숫자(0부터 9까지)가 몇 번 나오는지 계산하는 프로그램입니다.
count_digits 함수와 count_zeros 함수가 각각 숫자 'digit'이 몇 번 나오는지 계산하는 함수와 0이 몇 번 나오는지 계산하는 함수입니다.
count_digits 함수는 재귀 호출을 이용해서 1부터 N까지의 숫자에서 'digit'이 몇 번 나오는지 계산합니다.
count_zeros 함수는 1부터 N까지의 숫자에서 0이 몇 번 나오는지 계산합니다.
마지막으로, count_digits 함수에서 0이 몇 번 나오는지 계산한 결과에서 count_zeros 함수에서 계산한 0이 몇 번 나오는지 결과를 빼서 0이 몇 번 나오는지 계산합니다. 그리고 1부터 9까지의 숫자가 각각 몇 번 나오는지 계산하여 출력합니다.