https://www.acmicpc.net/problem/1748
1748번: 수 이어 쓰기 1첫째 줄에 N(1 ≤ N ≤ 100,000,000)이 주어진다.www.acmicpc.net
웬진모르겠지만 브루트포스에 섞여있어서,
1부터 n까지 모든 수의 len(str())을 더해서 풀었는데, 시간초과가 났다.
그래서방법을 갈구하다가,
자리의 규칙을 찾아냈다.
1+2+….+9=9 (10^0)(91)
10+11…..+9=180 (10^1)(92)
101+102+…..(999)=2700 (10^2)(93)
예를 들어 n이 998이라면, 3자리이므로
먼져 999까지의 모든 숫자를 더해준다 9+180+2700=2889
여기서 999와 998의 차이를 구한다
999 (10^3-1) - 998=1
그후, 이 차이에 있는 숫자들은 모두 3자리이므로,
999까지 모두 생각한 결과에서, 차이에 있는 숫자들의 갯수 * 3을 빼준다.
2889-3*1=2886
문제는 엄청 쉬워보이고 코드도 간단한데 구현하기 꽤 까다로웠다.
##코드##
n=input()ss=len(n) #몇자리수인지answer=0for i in range(ss):
answer+= 9*(10**i)*(i+1)answer -= ((i+1)* ((10**ss-1)-int(n) ))print(answer)