본문 바로가기

알고리즘

[백준][KOTLIN][2231] 분해합

728x90

문제

풀이

  1. 각 자리수의 합을 구하는 식을 이용한다.
    Ex) 216 => 1. 216 % 10 -> 일의 자리 수가 나옴
           2. 216 / 10 -> 일의 자리 수를 제외한 수가 나옴 : 21
           3. 1, 2번 과정을 n 이 0이 될때까지 반복하면 각 자리 수를 찾을 수 있음
  2. 각 자리수의 합과 현재의 숫자를 합하여 N 과 같으면 루프를 빠져 나온다.
import java.util.*

fun main(args: Array<String>) {
    val sc = Scanner(System.`in`)
    val N = sc.nextInt()

    var min = 0

    for (i in 1..N) {
        val lsum = lineSum(i)

        if (i + lsum == N) {
            min = i
            break
        }
    }

    print(min)
}

private fun lineSum(_n: Int): Int {
    var n = _n
    var sum = 0
    while (n > 0) {
        sum += n % 10
        n /= 10
    }
    return sum
}
728x90