level 2. 하샤드 수 (Javascript)

하샤드 수

문제

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
Harshad함수는 양의 정수 n을 매개변수로 입력받습니다. 이 n이 하샤드수인지 아닌지 판단하는 함수를 완성하세요.
예를들어 n이 10, 12, 18이면 True를 리턴 11, 13이면 False를 리턴하면 됩니다.

풀이 (본인)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Harshad(n){
var strArr = n.toString().split('');
var numSum = 0;
for(var num = 0; num<strArr.length; num++){
numSum += strArr[num]*1
}
return (n%numSum===0)? true: false;
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(Harshad(10)); // true
console.log(Harshad(13)); // false
console.log(Harshad(18)); // true
console.log(Harshad(2341)); // false
console.log(Harshad(222220)); // true

풀이 (다른 사람)

1
2
3
4
5
6
7
8
9
function Harshad(n){
return !(n%(n+'').split('').reduce(function (i, sum) {return +sum + +i;}));
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(Harshad(10)); // true
console.log(Harshad(13)); // false
console.log(Harshad(18)); // true
console.log(Harshad(2341)); // false
console.log(Harshad(222220)); // true

배운점

  • Array의 메서드로 reduce를 사용하여 for문을 사용하지 않아도 순회하는 함수 사용을 할 수 있다는 것을 배웠다.

느낀점

  • for문을 사용하면 브라우저의 속도 측면에서 reduce메소드보다 느리므로 알고리즘의 작동속도를 빠르게 하는 스킬을 늘려야겠다.
공유하기