1
부터 N
까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.
N(1 ≤ N ≤ 100,000,000)
이 주어진다.left = [
1,
10,
100,
10000,
100000,
1000000,
10000000,
100000000,
1000000000
]
right = [
9,
99,
999,
9999,
99999,
999999,
9999999,
99999999,
999999999
]
N = int(input()) # N이 15면
sum = 0
for i in range(len(left)):
if N >= left[i] and N <= right[i]: # i가 1일 때 true
sum += (N - left[i] + 1) * (i + 1)
break
else: # 1. 먼저 이거 실행
sum += (right[i] - left[i] + 1) * (i + 1)
# sum 에 +9 , +12 되서 sum은 21출력
print(sum)
join
으로 문자열로 풀다가 당연히 시간초과가 났다.left
, right
각 자릿수의 시작값과 끝값을 정의 한다.for
문을 돌고 , N
이 현재 자릿수 범위에 해당하면 현재 자릿수 범위에서 남은 숫자 개수 * 자릿수를 더해준다.N
이 현재 자릿수 범위보다 크면 현재 자리수 범위의 전체 숫자 개수 × 자리수를 더한다. N
이 15면 1자리수는 1~9까지 → 9개 × 1자리 = 9 , 2자리수는 10~15까지 → 6개 × 2자리 = 12
- 자릿수를 이해해야 풀 수 있던 문제였어서 처음에 좀 헤맸다.