본문 바로가기
🍎 Swift/Programmers

[👾 Programmers] 21. 하샤드 수

by 솔비님 2024. 6. 26.

1. 문제 설명 (📎Link)

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 

예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.

자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

 

2. 제한사항

n은 1이상 10000 이하인 자연수입니다.


📝 문제

func solution(_ x:Int) -> Bool {
	return true
}

 

 

💻 내가 푼 방법(테스트 성공)

func solution(_ x:Int) -> Bool {
    //들어온 양의 정수 x를 개별적인 정수로 나눠주기 위해 String으로 형변환
    var str = String(x)
    
    //str값에 map함수 적용하여 다시 개별적인 Int값으로 구분
    //후에 다시 reduce함수 적용하여 모든 요소들을 더해준 값을 변수 sum에 넣어줌
    var sum = str.map{Int(String($0))!}.reduce(0, +)
    
    //(Bool로 반환해야 하므로)나머지 값이 0인 경우 true 출력
    //아닌 경우는 false 출력
    if x % sum == 0 {
        return true
    } else {
        return false
    }
}

🔎 의문점과 공부한 것

1. 처음에 map함수와 reduce함수를 따로 써서 총 3개의 변수가 필요했는데 아래와 같이 줄일 수 있다는 걸 알았다

var arr = str.map{Int(String($0))!}
var sum = arr.reduce(0, +)

→ 변경 전

var sum = str.map{Int(String($0))!}.reduce(0, +)

→ 변경 후