BOJ/미해결

BOJ 1019 - 책 페이지

yanJuicy 2024. 8. 28. 14:45
반응형

문제

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
 
= 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 + 19 + 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