문제 링크
https://www.acmicpc.net/problem/1019
첫번째 접근
당연히 틀리단걸 알지만 입력받은 수 N만큼 반복문을 돌면서 N의 자릿수 하나하나 딕셔너리에 저장하는 방식으로 접근했었다.
당연히 시간초과가 발생했고 굳이 딕셔너리에 저장할 필요도 없었다.
두번째 접근
자릿수가 늘어날 때마다 해당 자릿수의 숫자까지는 (자릿수 - 1) * 10 만큼 늘어난다.
입력받은 N의 1의 자릿수부터 페이지 수를 추가하되, 자릿수가 커질때마다 추가되는 페이지수를 10씩 곱해준다.
전체 코드
N = int(input())
arr = [0] * 10
num = 1
def make_nine(N):
while N % 10 != 9:
for i in str(N):
arr[int(i)] += num
N -= 1
return N
# 1의 자릿수부터 num 만큼 증가시키며 연산한다.
# N을 10씩 나눠가며 현재 자릿수를 증가시킨다.
# 자릿수가 커질수록 num을 10씩 곱한다.
while N > 0:
# N의 현재 마지막 자릿수를 9로 맞춰준다
N = make_nine(N)
if N < 10:
for i in range(N + 1):
arr[i] += num
else:
for i in range(10):
arr[i] += (N // 10 + 1) * num
arr[0] -= num
num *= 10
N //= 10
for i in range(0, 10):
print(arr[i], end=' ')