분해합을 구하는 방법은 여러가지일 수 있으며 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)
'Algorithm > Baekjoon' 카테고리의 다른 글
Swift - 백준 7568번 덩치 (0) | 2024.08.21 |
---|---|
Swift - 백준 10773번 제로 (0) | 2024.08.20 |
Swift - 18110번 sovled.ac (0) | 2024.08.20 |
Swift - 백준 11651번 좌표 정렬하기 2 (0) | 2024.08.19 |
Swift - 백준 2869번 달팽이는 올라가고 싶다 (1등코드) (0) | 2024.08.19 |