1부터 N까지 수를 이어서 쓰면 새로운 하나의 수를 얻게 된다.
이때, 생기는 새로운 수의 자리수를 구하는 문제이다.
입력하는 N값(1<= N <= 100,000,000)이 너무 크기 때문에, 실제로 수를 만드는 것은 너무 시간이 오래 걸린다.
총 N개의 수를 하나의 문자열로 만들어야 한다.
시간 복잡도 : O(n) X 10
ex)
n = 120
1-9 : 1 x 9
10-99 : 2 X (99-10+1) X 2
100-120 : 3 X 9 (120-100+1) X 3
import java.util.Scanner;
public class Num1748 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long ans = 0;
for (int start =1, len = 1; start <= n; start *= 10, len++) {
int end = start*10-1;
if (end >n) {
end = n;
}
ans += (long)(end =- start + 1) * len;
}
System.out.println(ans);
}
}
참고 :
출처 : https://www.acmicpc.net/problem/1748