[알고리즘] 하샤드 수 (JavaScript)

yeon·2023년 4월 10일
0

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를 들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다. 자연수 x를 입력받아 x가 하샤드 수인지 아닌지 검사하는 함수, solution을 완성해주세요.

제한 조건
x는 1 이상, 10000 이하인 정수입니다.

첫 번째 시도

function solution2(x) {
    const arr = String(x).split("");

    let sum = arr.reduce((acc, cur) => acc + Number(cur), 0);

    return (x / sum) % 2 === 0 ? true : false;
}

두 번째 코드

function solution(x) {
    if (x < 10) {
        return true;
    }

    const arr = String(x).split("");

    let sum = arr.reduce((acc, cur) => acc + Number(cur), 0);

    return (x / sum) % 2 === 0 ? true : false;
}
  • 1의 자리 수를 생각하지 못해서 오류가 나서, 이 경우도 조건에 추가했다.
  • 그래도 테스트가 몇 개가 통과가 되지 않아서 70점이 나왔다.

최종 풀이

function solution(x) {
    if (x < 10) {
        return true;
    }

    const arr = (x + "").split("");

    let sum = arr.reduce((acc, cur) => acc + Number(cur), 0);

    return x % sum === 0;
}
  • return문에 문제가 있어 수정했더니 통과가 되었다.
  • reduce 사용할 때 +acc + +cur 이렇게 하면 Number() 메소드를 쓰지 않아도 된다.
  • 이미 true/false로 나오면 ? true: false는 없어도 된다는 것 염두하자.

다른 사람의 풀이

function solution(x) {
    let num = x;
    let sum = 0;
    do {
        sum += x%10;
        x = Math.floor(x/10);
    } while (x>0);

    return !(num%sum);
}

0개의 댓글