하샤드 수

젬마·2023년 2월 22일
0

문제

문제 설명

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

제한 조건

  • x는 1 이상, 10000 이하인 정수입니다.

풀이

나의 코드

function solution(x) {
    let sum = 0;
    let string = String(x);
    
    for (let i = 0; i < string.length; i++) {
        sum += Number(string[i]);
    }
    
    return x % sum === 0;
}

설명

  • x의 n번째 자릿수를 추출하기 위해 문자열 타입으로 변환 후 for문 돌림 => sum에 더할 때는 숫자 타입으로 변환
  • 식이 반환하는 값 자체가 boolean이라 삼항연산자 안 씀

개선된 코드

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

설명

  • 문자열 타입으로 변환하지 않고 숫자 타입으로 바로 자릿수를 합하기 위해 사용한 방법
  • x가 321이라고 가정할 때 x % 10 === 1 => 일의 자릿수
  • Math.floor(x / 10) === 32 => 자릿수가 10씩 줄어듦 (일의 자릿수 버려짐)
  • x가 0보다 크다는 조건이 참일 동안 계속 반복
profile
취준생은 프론트엔드의 꿈을 꾸는가

0개의 댓글