양의 정수 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 |
function solution(x) {
let answer = false;
let arr = x.toString().split("");
let sum = 0;
for (let i = 0; i < arr.length; i++) {
sum += parseInt(arr[i]);
}
if ((x % sum) == 0) {
answer = true;
} else if ((x % sum) != 0) answer = false;
return answer;
}
정수 x를 index를 통해 접근하기 위해 배열로 변환시키고 sum이라는 변수를 선언해 각 index마다 정수로 변환시켜 더해주었다. 그 후 x를 sum으로 나누어 0으로 나누어 떨어지면 true, 그렇지 않으면 false를 출력하게끔 했다.
공부를 시작한지 얼마 안되고 풀었던 문제였는데 포스팅을 위해 다시 보니 너무 비효율적인것 같다. index 접근은 문자열도 가능하니 배열로 만들필요가 없었고, 또 출력해야하는 답이 boolean형이었기 때문에 굳이 answer 변수를 만들어 값을 넣어 줄 필요가 없었다.
function solution(x) {
let str = x.toString()
let sum = 0
for (let i = 0 ; i < str.length ; i++) {
sum += parseInt(str[i]);
}
return (x % sum == 0)
}