반응형
문제
https://www.acmicpc.net/problem/1019
풀이
숫자 n을 10으로 나눠가면서 1의자리에서 0~9까지의 숫자가 나오는 규칙을 찾아야 한다
숫자 n을 283으로 가정해서 예를 들었을 때
현재 1의 자리는 3이므로
- 0 ~ 2는 28 + 1(n / 10 + 1)번 나타난다
- 4 ~ 9는 28(n / 10)번 나타난다
- 3의 경우 28 + 1번 나타난다
다음으로 283에서 10의 자리에 위치했던 수들의 개수를 세기 위해 10으로 나눈다
그러면 28이고 현재 1의 자리는 8이므로
- 0 ~ 7는 (2+1) x 10 번 나타난다 (원래 수에서 10의 자리였으므로 10을 곱해줘야한다)
- 9는 2 x 10번 나타난다
- 8의 경우 280, 281, 282, 283 총 4개의 숫자를 고려해줘야 한다. 이 경우는 따로 갯수를 세는 식이 필요하다
이 과정을 n > 0일 경우 반복해주면 된다
예외 상황으로 0이 앞에 나오는 경우를 빼줘야 한다
코드
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
answer = [0] * 10
rest_add_nums = 0
rest_add_num_zero = 1
digit = 1
n = int(input())
while n > 0:
cur = n % 10
n //= 10
answer[0] -= digit
for i in range(cur):
answer[i] += (n + 1) * digit
answer[cur] += n * digit + rest_add_nums + rest_add_num_zero
for i in range(cur + 1, 9 + 1):
answer[i] += n * digit
rest_add_nums += cur * digit
digit *= 10
print(*answer)
|
cs |
반응형
'BOJ > 미해결' 카테고리의 다른 글
BOJ 2206 - 벽 부수고 이동하기 (2) | 2024.09.16 |
---|---|
BOJ 14888 - 연산자 끼워넣기 (2) | 2024.09.14 |
BOJ 14500 - 테트로미노 (0) | 2024.08.27 |
BOJ 1436 - 영화감독 숌 (0) | 2024.08.23 |
BOJ 2630 - 색종이 만들기 (0) | 2024.08.20 |