양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
내장함수를 사용하면 비교적 간단하게 풀 수 있다
다른 방법도 시도해 보고 싶어서 while, 나머지, 몫을 이용해서 풀어보았다
while의 조건을 정하는게 어려웠다
function solution(x) {
var answer = true;
const sum=x.toString().split("").reduce((a,b)=>a+Number(b),0)
if(x%sum!==0)return false
return answer;
}
function solution(x) {
var answer = true;
let sum = 0;
let origin = x;
while (x) {
sum += x % 10;
x = Math.floor(x / 10);
}
console.log(sum);
if (origin % sum !== 0) return false;
return answer;
}
- 전달 받은 x는 계속 바뀔 것이므로 origin에 미리 복사해둔다
- 일의 자릿수 부터 sum에 더해 나가는데 x를 10으로 나눈 나머지를 의미한다
- 다음턴을 돌 때는 x를 10으로 나눈 몫을 이용해야 하므로
- x=Math.floor(x/10) 소수점을 제외하기 위해서 floor사용해준다
- !!몫이 0일지라도 이미 나머지는 sum에 더해주고, 다음턴은 진행되지 않는다
- original number를 sum으로 나눠 떨어지지 않으면 false를 return 해준다