[Kotlin] 백준 1019 - 책 페이지

HighMoon·2023년 5월 8일
0

백준 문제 링크

import kotlin.math.pow

fun main() {
    val br = System.`in`.bufferedReader()
    val n = br.readLine()
    val cnt = Array(10) { 0L }

    n.indices.forEach { i ->
        val num = n.substring(i, i+1).toInt()

        val powNum = 10.toDouble().pow(n.length - 1 - i).toLong()
        val back = n.substring(i+1, n.length)
        val front = n.substring(0, i)

        if (back.isNotEmpty()) cnt[num] += back.toLong()
        cnt[num] ++

        (0 until num).forEach { cnt[it] += powNum }

        if (front.isNotEmpty()) (0..9).forEach { cnt[it] += front.toLong() * powNum }
        cnt[0] -= powNum
    }

    val sb = StringBuilder()
    cnt.forEach { sb.append("$it ") }
    println(sb)
}

N의 0번 인덱스부터 하나씩 이동하면서
앞, 뒤에 있는 숫자로 부터 해당 인덱스에서 숫자가 몇번 반복되는지 알아낼 수 있습니다.

"458231"가 주워졌을 때,

인덱스012345
Char458231

0번 인덱스에서
'4'는 뒤에있는 수만큼 58232(0 ~ 58231)번 반복되고
'1'~'3'은 100000번 반복이 된다는 것을 알 수 있습니다.

이와 같은 방법으로,
3번 인덱스에서 '2'은 31번, '0'~'1'는 100번씩 반복됩니다.
또한 앞에있는 수458(0 ~ 457)번만큼 '0'~'9'가 100번씩 반복이 되는데
앞에있는 수가 0인 경우 3번 인덱스의 '0'은 카운트하면 안되기 때문에 빼줘야 됩니다.

profile
안드 개발자

0개의 댓글

관련 채용 정보