https://www.acmicpc.net/problem/1748

 

1748번: 수 이어 쓰기 1

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

www.acmicpc.net

1부터 n까지 숫자를 이어써서 새로운 숫자를 만들면 그 숫자의 길이를 구하는 문제이다.

예를 들어서 n이 12인 경우 123456789101112 이다.

 

이 문제는

1부터 9는 1자리

10부터 99는 2자리

100부터 999는 3자리인 것을 이용해서 풀면 된다.

 

n이 다음 범위보다 작은 경우에는 n까지의 자리만 구하도록 잘 처리해주는 것이 중요하다.

그렇지 않은 경우에는 그냥 (길이 * 9 * i )를 해주면 된다.

문제에 나와있는 120을 예로 들면

 

처음에는

1 * 9 * 1

2 * 9 * 10

3 * ( 120- 100 + 1)

을 모두 더해줘서 답을 구한다.

 

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
#include <iostream>
using namespace std;
 
int main() {
    int n;
    cin >> n;
 
    int ans = 0;
    int len = 0;
    for (int i = 1; i <= n; i*=10) {
        len += 1;
        if (n < i*10) {
            ans += len*(n - i + 1);
            
        }
        else {
            ans += len * 9 * i;
        }
        
    }
 
    cout << ans;
 
    return 0;
}
Colored by Color Scripter
 

'BOJ' 카테고리의 다른 글

[BOJ] 13458. 시험 감독  (0) 2019.07.03
[BOJ] 2529. 부등호  (0) 2019.07.03
[BOJ] 1107. 리모컨  (0) 2019.07.03
[BOJ] 14442. 벽 부수고 이동하기 2  (0) 2019.06.28
[BOJ] 2206. 벽 부수고 이동하기  (0) 2019.06.28

+ Recent posts