제이슨의 개발이야기

백준 1748번 수 이어쓰기1. 코틀린 본문

코딩테스트

백준 1748번 수 이어쓰기1. 코틀린

제이쓰은 2021. 10. 17. 22:01
728x90
반응형

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

 

1748번: 수 이어 쓰기 1

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

www.acmicpc.net

 

 안녕하세요! 

백준에서 실버 3 문제인 수 이어 쓰기1 문제를 풀어봤습니다! 

 

문제

1부터 N까지의 수를 이어서 쓰면 다음과 같이 새로운 하나의 수를 얻을 수 있다.

1234567891011121314151617181920212223...

이렇게 만들어진 새로운 수는 몇 자리 수일까? 이 수의 자릿수를 구하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 새로운 수의 자릿수를 출력한다.

예제 입력 1 복사

5

예제 출력 1 복사

5

 


이 문제는 그냥 단순히 반복문을 통해서 문자열을 붙어나가면 메모리 초과 가 뜹니다! 

예를 들면 12345678910111213... 이런식으로

 

그래서 단순히 반복문을 통해서 문자열 붙이기 는 하면 안되고 

단 붙이는 숫자의 길이만큼 더하면 문제를 해결할 수 있습니다!

 

즉 

1~9 는 한자리 이므로 1씩 더하고

10~99 는 두자리 이므로 2씩더하면 됩니다!

 

그리고 10으로 나눴을때 나머지가 0이면 10이므로 그때 1이 아니라 2로 바꾼 후 더하는 방식으로 문제 접근하면 됩니다! 

 이 방법을 생각하면 생각보다 쉽게 문제를 풀 수 있습니다!

 

fun main(){
  var num = readLine()!!.toInt()

    var plus = 1
    var sum = 0
    var divider = 10
    for(i in 1..num){

        if(i%divider==0){
            divider *=10
            plus++
        }

        sum+=plus
    }
println(sum)
}
728x90
반응형