# 유형 : 시뮬레이션

# 난이도 : 실버 3

# 그냥 반복문을 돌리면 시간초과 또는 메모리 초과가 날 것같아서, 자릿수를 이용하는 방식으로 해결하였다. 아래 표는 각 구간의 개수이다. 따라서 일의 자리는 1 * 9, 십의 자리는 2 * 90, 백의 자리는 3 * 900 이런식으로 진행하다가, 마지막 자리수는 음 예를 들어 1542라고 생각해보면 1542 - 1000 + 1 => 543개 마지막 자리수의 단위(1000)를 빼주고 1을 더해준 다음 자릿수(4)를 곱해준다.

1~9 9
10~99 90
100~999 900
1000~9999 9000

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package bj;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public class p1748 {
    public static void main(String[] args) throws NumberFormatException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String num = br.readLine();
        int len = num.length();
        
        int N = Integer.parseInt(num);
        
        int tmp = 9;
        int result = 0;
        for(int i=1; i<len; i++) {
            result += i*tmp;
            tmp*=10;
        }
        
        int last =(int)( N - Math.pow(10, len-1)+1* len;
        result += last;
        System.out.println(result);
        
    }
}    
 
cs

+ Recent posts