양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.
x는 1 이상, 10000 이하인 정수입니다.
arr return
10 true
12 true
11 false
13 false
이렇게 풀면 true 값은 잘 리턴하는데 , false값은 잘 리턴이 안된다.
콘솔에 돌려보니까 그냥 모든 값에 true를 리턴하는 코드다...
function solution(x) {
// 10 은 1,0 1로 나눠져서 하샤드 수
// 12는 1,2 3으로 나눠져서 하샤드 수
// 11은 2로 나눠지지 않아서 놉
let arr = String(x).split('') // 수를 문자로 바꾼후, split을 이용해 배열에 각각 넣는다.
let number = 0;
for(let el of arr){
number = number + el;
}
if(x%number === 0){
return true;
}
return false;
}
문제 해결: 배열안에 있는 값들이 문자로 취급 되어서
아무리 number 0과 더해봤자 문자들이 합쳐지는 모양이 되어버렸다
solution(13)
'013'
따라서 Number()를 이용해 배열 각각 요소를 숫자 타입으로 바꿔준후 더해줬다.
function solution(x) {
let arr = String(x).split('') // 수를 문자로 바꾼후, split을 이용해 배열에 각각 넣는다.
let number = 0;
for(let el of arr){
number = number + Number(el);
}
if(x%number === 0){
return true;
}
return false;
}
function solution(x) {
let arr = String(x).split('')
// x를 문자로 바꾼후, split을 이용해 배열에 각각 넣는다.
let number = 0;
for(let el of arr){
number += Number(el);
}
return x%number === 0 ? true : false
}