하샤드 수 (Level 2)
숫자를 매 자리수마다 쪼개기!. number > string > number
문제
양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다.
예를들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.
Harshad함수는 양의 정수 n을 매개변수로 입력받습니다. 이 n이 하샤드수인지 아닌지 판단하는 함수를 완성하세요.
예를들어 n이 10, 12, 18이면 True를 리턴 11, 13이면 False를 리턴하면 됩니다.
풀이
function Harshad(n){
let arr = n.toString().split(''), sum = 0;
for ( let i = 0; i < arr.length; i++ ) {
sum += parseInt(arr[i])
}
if ( n % sum == 0 ) {
return true
} else {
return false
}
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(Harshad(18))
숫자를 문자열로 바꿔주고 잘라서 배열에 담고, sum에 합해준다.
메서드로 한방에 해줄 방법이 없나 오래 고민을 했는데 딱히 방법이 없는것 같아 아쉽다.
다른 사람의 풀이
function Harshad(n){
return !(n%(n+'').split('').reduce(function (i, sum) {return +sum + +i;}));
}
// 아래는 테스트로 출력해 보기 위한 코드입니다.
console.log(Harshad(18))
방법이 없을리가 없지 당연히 있다. 저런 방법으로 접근했는데 string에 연산기호를 붙여 number타입으로 바꾸는 생각!
이 + 기호 하나 또는 *1 /1 로도 사용할수 있지만, 생각해내기는 쉽지 않은것 같다. 외워놔야지ㅋㅋ~
이 코드는 따봉 1개로 부족하다