728x90
https://www.acmicpc.net/problem/1748
문제
1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.
1234567891011121314151617181920212223...
이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.
해설
일반적으로 보면 다음과 같다.
val n = readLine().toInt()
var result = 0
for(i in 1 .. n) {
if(i <= 9) result += 1
else if(i <= 99) result += 2
else if(i <= 999) result += 3
else if(i <= 9999) result += 4
.
.
.
}
이를 더 효율적으로 만들어보자.
while(i <= n) {
result += n - i + 1
i *= 10
}
이는 반복문을 돌릴 때마다 각 자리수의 합을 더해주는 것이다.
소스 코드
fun main() = with(System.`in`.bufferedReader()) {
val n = readLine().toInt()
var result = 0
var i = 1
while(i <= n) {
result += n - i + 1
i *= 10
}
println(result)
}
728x90
'PS(Problem Solving) > BOJ' 카테고리의 다른 글
[백준/BOJ] 2407: 조합 (0) | 2022.02.02 |
---|---|
[백준/BOJ] 5397번: 키로거 (0) | 2022.02.02 |
[백준/BOJ] 10972번: 다음 순열 (0) | 2022.01.30 |
[백준/BOJ] 2512번: 예산 (0) | 2022.01.28 |
[백준/BOJ] 9613번: GCD 합 (0) | 2022.01.27 |
댓글