분해합을 구하는 방법은 여러가지일 수 있으며 2가지 방법을 설명하겠습니다

 

 

 

아래 코드는 작은 수부터 올라가며 각 자리수를 더하는 방식으로 구현된 코드입니다. 만약 가장 작은 생성자를 구하면 프로그램을 종료하는 방식입니다.

import Foundation


let num = readLine()!

for i in 1...Int(num)! {
    var value: Int = i
    for j in String(i) {
        value += Int(String(j))!
    }
    if value == Int(num) {
        print(i)
        exit(0)
    }
}

print(0)

 

하지만 위에 코드를 아래와 같이 좀 더 짧게 구현할 수도 있습니다.

reduce를 사용하여 배열의 모든 자릿수를 더한 후 i 값까지 더하여 원하는 값을 찾게 된다면 종료하는 방식으로 이루어지게끔 코드를 짤수도 있습니다.

let n = Int(readLine()!)!
var answer = 0

for i in 1...n {
    if "\(i)".map({ Int(String($0))! }).reduce(0, +) + i == n {
        answer = i
        break
    }
}

print(answer)

 

 

ytw_developer