코딩테스트

[코딩테스트] 하샤드 수

이경욱 2023. 11. 24. 10:25

문제

양의 정수 x가 하샤드 수이려면

x의 자릿수의 합으로 x가 나누어져야 합니다.

예를 들어 18의 자릿수 합은 1+8=9 이고,

18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.

자연수 x를 입력받아

x가 하샤드 수인지 아닌지 검사하는 함수,

solution을 완성해주세요.

 

 

 

해결

function solution (x) {
    const answer = (x+'')
    .split('')
    .map((e) => e*1)
    .reduce((_, e) => _ + e);
    return x % answer === 0 ? true : false;
}

 

우선 x+''으로 문자 형변환을 해준 뒤

split을 통해 배열로 만들었다.

그러고 map을 통해 *1을 해서 숫자 형변환을 하고

reduce로 배열의 전체 합을 구했다.

 

return할 때 삼항연산자를 통해

x와 answer의 몫이 0이면 true를 반환하게 했다.

 

 

 

다른 사람의 풀이

// 다른 사람의 풀이
function Harshad(n){
    return !(n % (n + "").split("").reduce((a, b) => +b + +a ));
  }

 

reduce안에 형변환을 어떻게 하지 하는 생각을 했는데

+를 붙여주니 깔끔하고 

map메서드를 굳이 사용하지 않아도 되었다..!

 

그리고 삼항연산자를 사용하지 않고

앞에 !를 붙여 true false를 반환하게 한 것도 배워갔다.