728x90
1019. 책 페이지
난이도 : 플래티넘 5
소요 시간 : 20분
날짜 : 2024.12.31
언어 : 파이썬
알고리즘 유형 : 구현, 수학
설명 보기전에 문제 풀어보러 가기
1. 문제 설명
- 1부터 n까지 [0, 1 ,2, ,,, 9]가 각각 몇 번 나오는지 구하기
- 1 <= n <= $10^9$
2. 해결 방식
- 자리수 별로 반복하기. (최대 9번)
- factor = 1 ($10^0$)부터 시작해서 10씩 곱해가며 반복한다.
- 현재 자리를 기준으로, 현재자리 숫자와 더 높은 자리 숫자, 더 낮은 자리 숫자로 구분한다.
- 0부터 9까지 확인하여 결과값에 더해준다.
- 현재자리수보다 작은 수 : (높은자리 숫자 + 1) * factor를 더 해준다.
- 현재자리 수 : 높은자리 숫자 * factor + 낮은자리 숫자 + 1을 더 해준다.
- 현재자리 수보다 큰 수 : 높은자리 숫자 * factor를 더 해준다.
- 0부터 9까지 다 돌았으면 res[0]을 factor만큼 빼준다.
3. 정답 코드
import sys
# input = sys.stdin.readline
sys.stdin = open("C:/Users/ghtjd/Desktop/tmp/python/input.txt", "r")
def sol(n: str):
res = [0] * 10
n = int(n)
factor = 1
while n >= factor:
current = (n // factor) % 10 # 현재 자리 숫자
higher = n // (factor * 10) # 더 높은 자리 숫자
lower = n % factor # 더 낮은 자리 숫자
for i in range(10):
if i < current:
res[i] += (higher + 1) * factor
elif i == current:
res[i] += higher * factor + (lower + 1)
else:
res[i] += higher * factor
res[0] -= factor
factor *= 10
print(*res)
sol(input())
반응형
'백준 문제풀이 코드저장소 > Platinum' 카테고리의 다른 글
Baekjoon 6549. 히스토그램에서 가장 큰 정사각형 / Python (0) | 2025.01.06 |
---|---|
Baekjoon 32034. 동전 쌍 뒤집기 / Python (0) | 2025.01.02 |
Baekjoon 16566. 카드 게임 / Python (0) | 2024.06.30 |
Baekjoon 18122. 색깔 하노이 탑 / Python (0) | 2024.06.30 |