https://www.acmicpc.net/problem/1019
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까지의 숫자가 각각 몇 번 나오는지 계산하여 출력합니다.
'2022 하반기 > Python' 카테고리의 다른 글
백준 8958 python (0) | 2023.02.20 |
---|---|
백준 16205 python (0) | 2023.02.20 |
백준 10815 python (0) | 2023.02.17 |
Characteristics of python data type(파이썬 데이터 타입의 특성) (0) | 2023.02.16 |
백준 1931 Python (0) | 2023.02.08 |
댓글