728x90
1. 문제 설명
1부터 N까지의 수를 이어서 쓸 때 만들어진 수가 몇 자릿수인지 구하는 문제이다.
같은 자릿수 X를 가진 수들을 다 이어서 수를 만들면 그 수의 자릿수를 9*10^(X-1)*X이다.
수의 개수는 9*10^(X-1)이고 그 수들이 차지하는 길이는 X이므로 위와 같은 식이 나온다.
N의 자릿수를 A라고 하면,
1부터 A-1의 자릿수를 가진 수들로 만들어진 길이는 위의 식을 이용해서 구한다.
그 후 A의 자릿수를 가지는 수의 개수는 N-10^(A-1)+1개이고 차지하는 길이는 각각 A이다.
그러므로 마지막에 (N-10^(A-1)+1)*A를 더해서 답을 구한다.
2. 코드
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
String N=scan.next();
int length=N.length();
int N_number=Integer.parseInt(N);
long sum=0;
int index=1;
for(;index<length;index++){
sum+=9*Math.pow(10,index-1)*index;
}
sum+=(N_number-Math.pow(10,index-1)+1)*index;
System.out.println(sum);
scan.close();
}
}
728x90
'알고리즘' 카테고리의 다른 글
[JAVA]백준 17829번: 222-풀링 (0) | 2020.11.29 |
---|---|
[JAVA]백준 2630번: 색종이만들기 (0) | 2020.11.27 |
[JAVA]백준 1735번: 분수 합 (0) | 2020.11.14 |
[JAVA]백준 4641번: Doubles (0) | 2020.11.14 |
[JAVA]백준 1057번: 토너먼트 (0) | 2020.11.14 |