Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 자기 분할 숫자(Self-Dividing Number) 판별하는 방법

이번 글에서는 숫자를 입력받아 해당 숫자가 자기 분할 숫자(self-dividing number)인지 판별하는 자바스크립트 함수를 작성해 보겠습니다.

자기 분할 숫자란 무엇일까요?

  • 자기 분할 숫자란 자신을 구성하는 모든 자릿수로 나누어 떨어지는 수를 의미합니다.
  • 자기 분할 숫자라면 "이 숫자는 자기 분할 숫자입니다"를, 그렇지 않다면 "이 숫자는 자기 분할 숫자가 아닙니다"를 출력해야 합니다.

예시로 이해하기

  • 128은 자기 분할 숫자입니다. 각 자릿수인 1, 2, 8이 모두 128을 나누어 떨어뜨릴 수 있기 때문입니다.
  • 102는 자기 분할 숫자가 아닙니다. 0이라는 자릿수를 포함하고 있는데, 어떤 수도 0으로 나눌 수 없기 때문입니다.
  • 26 역시 자기 분할 숫자가 아닙니다. 26을 자릿수 6으로 나누면 나누어 떨어지지 않기 때문입니다.

구현 코드

위 조건을 만족하는 코드는 다음과 같습니다.

const num1 = 128;
const num2 = 102;
const num3 = 26;

const selfDivisible = num => {
   let n = num; // 원본 숫자 저장
   while(num){
      let temp = num % 10; // 마지막 자릿수 추출
      if(n % temp !== 0){ // 자릿수로 나누어 떨어지지 않으면
         return false;
      }
      num = Math.floor(num / 10); // 마지막 자릿수 제거
   }
   return true;
};

console.log(selfDivisible(num1));
console.log(selfDivisible(num2));
console.log(selfDivisible(num3));

코드 동작 원리

  1. 처음 입력된 숫자를 변수 n에 따로 저장해 둡니다.
  2. while 반복문 안에서 num % 10을 이용해 숫자의 마지막 자릿수를 하나씩 추출합니다.
  3. 추출한 자릿수로 원본 숫자 n을 나눈 나머지가 0이 아니라면 즉시 false를 반환합니다.
  4. Math.floor(num / 10)으로 마지막 자릿수를 제거한 뒤 남은 자릿수를 계속 검사합니다.
  5. 모든 자릿수 검사를 통과하면 최종적으로 true를 반환합니다.

참고로 숫자에 0이 포함된 경우, 자바스크립트에서 n % 0의 결과는 NaN이 되고 이는 0과 같지 않으므로 자동으로 false가 반환됩니다. 따라서 별도의 0 처리 로직 없이도 올바르게 동작합니다.

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다.

true
false
false

128은 자기 분할 숫자이므로 true, 102와 26은 자기 분할 숫자가 아니므로 false가 출력되는 것을 확인할 수 있습니다.