PS(Problem Solving)/BOJ

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

JunsuKim 2022. 1. 30.
728x90

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

 

1748번: 수 이어 쓰기 1

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

www.acmicpc.net

문제

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

댓글