Dragonball Online Goku Hand
본문 바로가기
알고리즘 도장깨기

프로그래머스 Lv.1 "하샤드 수"

by 별의 코비 2022. 11. 18.
728x90

🔥 Programmers Lv.1 : 하샤드 수


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

📎 조건 :
∙ x는 1 이상, 10000 이하인 정수입니다.


👉🏻 My answer

function solution(x) {
    let sum = 0;
    let arr = String(x).split("");
    for (let i = 0; i<arr.length; i++){
        sum += parseInt(arr[i]);        
    }               
    return (x % sum == 0) ? true : false;
}
01. 먼저 x의 각 자리 수를 합해주기 위해 배열로 변환해줍니다.
02. for문을 사용하여 배열의 길이만큼 반복하고 x의 각 자리의 수를 더해준 값인 sum의 식을 만들어줍니다.
03. 그러나 문자열이기 때문에 숫자로 바꿔 더하기 위해서 parseInt()메서드를 사용해줍니다.
04. 그 후 이 합한 수인 sum이 x의 약수이면 true, 아니면 false인 식이 나오도록 식을 만들어줍니다.


👉🏻 Another ways

function Harshad(n){
    return !(n % (n + "").split("").reduce((a, b) => +b + +a ));
}
: n + "" -> 문자열로 바꿔주기
: 나머지 값이 0과 1만 나온다고 했을 때 js에서 0은 false, 1은 true로 출력합니다. 문제에서 나머지가 0일 때 true, 나누어 떨어지지 않을 때는 false를 출력하라고 했으니까 !를 붙여서 false는 true로, true는 false가 되도록 한 것 같습니다.

댓글