https://www.acmicpc.net/problem/1748
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 |