본문 바로가기

알고리즘/브루트포스(Brute Force)

[백준][2231] 분해 합

728x90

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

문제 풀이

1. N의 생성자를 구한다는 것은 반대로 분해합이 N 이 되는 수를 구하는 것으로 접근한다.

2. 백만개의 자연수에 대해서 분해합을 각각 구하여 N 과 같은 경우의 수 중 최소 값을 찾는다.

3. 각 자리수의 합을 구할 때 kotlin string 에서 제공하는 sumOf 를 이용하면 각자리 수의 합을 쉽게 구할 수 있다.

코드

import java.io.BufferedReader
import java.io.InputStreamReader

fun main(args: Array<String>) {
    val br = BufferedReader(InputStreamReader(System.`in`))
    val N = br.readLine().toInt()

    var result = Int.MAX_VALUE

    for (i in 1..1000000) {
        //val dividerSum = i + getSum(i)
        val dividerSum = i + i.toString().sumOf { it.digitToInt() }

        if (dividerSum == N) {
            result = Math.min(result, i)
        }
    }

    if (result == Int.MAX_VALUE) println(0)
    else println(result)
}

private fun getSum(num: Int): Int {
    var result = 0

    num.toString().toCharArray().forEach { c ->
        result += c.digitToInt()
    }

    return result
}
728x90

'알고리즘 > 브루트포스(Brute Force)' 카테고리의 다른 글

[백준][2798] 블랙잭  (0) 2024.04.29