적당한 고통은 희열이다

- 댄 브라운 '다빈치 코드' 중에서

Algorithm/Programmers

[Swift 알고리즘] Programmers 하샤드 수

hongssup_ 2022. 1. 10. 21:55
반응형
문제 설명
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
제한 조건
 - x는 1 이상, 10000 이하인 정수입니다.

 

입출력 예

print(solution(12)) //true
print(solution(13)) //false

내 답안

func solution(_ x:Int) -> Bool {
    let s = String(x)
    let arr = s.map {Int(String($0))!}
    var sum = 0
    for i in arr {
        sum += i
    }
    return (x % sum == 0) ? true : false
}

보완 답안

func solution(_ x:Int) -> Bool {
    let arr = String(x).map {Int(String($0))!}
    var sum = 0
    for i in arr {
        sum += i
    }
    return (x % sum == 0) 
}

 

모범 답안

func solution(_ x:Int) -> Bool {
    var sum = 0
    for i in String(x) {
        sum += Int(String(i))!
    }
    return (x % sum == 0)
}

고차 함수 사용 답안

func solution(_ x:Int) -> Bool {
    var sum = String(x).map { Int(String($0))! }.reduce(0, +)
    return (x % sum == 0)
}
728x90
반응형