2231번: 분해합
func decompositionSum(_ n: Int) -> Int {
let digits = String(n).map { Int(String($0))! }
return n + digits.reduce(0, +)
}
let N = Int(readLine()!)!
var result = 0
for i in 1..<N {
if decompositionSum(i) == N {
result = i
break
}
}
print(result)
- N의 분해합을 보고 N을 구할 수 있는 방법은 없습니다.
- 따라서 가장 작은 생성자를 구하기 위해서는 직접 분해합을 구해보는 방법 밖에는 없습니다.
- 다행히도 N의 최대 백만이기 때문에 직접 반복을 해도 시간 초과의 부담은 없습니다.
- 분해합 함수를 만들어 줍니다.
- 그리고 1 ~ N 중에 반복문을 돌려 생성자를 찾아줍니다.
- result에는 0을 넣어두어 생성자가 없다면 0이 출력되도록 합니다.
- 그리고 가장 작은 생성자를 구해야 하므로 생성자를 구하면 더 이상 생성자를 구하지 않고 break 합니다.