본문 바로가기
알고리즘

[JAVA]백준 1748번: 수 이어 쓰기 1

by Kwoncorin 2020. 11. 15.
728x90

www.acmicpc.net/problem/1748

 

1748번: 수 이어 쓰기 1

첫째 줄에 N(1≤N≤100,000,000)이 주어진다.

www.acmicpc.net

 

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