1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.
출력
첫째 줄에 새로운 수의 자릿수를 출력한다.
| 예제 입력 | 예제 출력 |
|---|---|
| 5 | 5 |
| 15 | 21 |
| 120 | 252 |
import sys
def findLength(n):
return len(str(n))
num = int(sys.stdin.readline())
fullLen = 0
for i in range(1, num+1):
fullLen += int(findLength(i))
print(fullLen)
그냥 1부터 n까지 돌면서 수의 길이를 더해주는 방법
시간초과 발생.
그럼 뭔가 규칙을 찾아서 최적화를 해야한다.
중간 과정은 필요하지않고 그냥 결과인 길이만 구하면 됨
import sys
num = sys.stdin.readline().strip()
#strip해주는거 잊지마라 안그럼 numLen에서 길이가 하나 더 추가된다 줄바꿈때문에
#153 1~9(9번) 10~99(90번) 100~153(주어진수 - 100 + 1)
numLen = int(len(num)) #3
sum = 0
for i in range(1, numLen + 1):
if i < numLen:
sum += (10**(i-1)) * 9 * i
#print(sum)
else:
sum += (int(num) - (10**(i-1)) + 1) * i
print(sum)
예제를 보면 숫자가 120일때는 길이가 252이다
1 2 3 4 5 6 7 8 9 (9개)-> 각각의 숫자의 길이가 1
10 11 12 13 14 ... 99 (90) -> 각각의 숫자의 길이가 2
100 101 102... 120 (num - 10^2) -> 각각의 숫자의 길이가 3