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

JavaScript로 숫자를 뒤집었을 때 소수인지 판별하는 방법

문제 정의

하나의 숫자를 인자로 받아, 그 숫자를 거꾸로 뒤집은 값이 소수(prime number)인 경우에는 true를, 그렇지 않은 경우에는 false를 반환하는 JavaScript 함수를 작성해야 합니다.

예를 들어 13을 뒤집으면 31이 되는데, 31은 소수이므로 이 경우 함수는 true를 반환해야 합니다. 참고로 이렇게 뒤집었을 때도 소수가 되는 수를 수학에서는 '에미르프(Emirp)'라고 부르기도 합니다.

풀이 접근 방법

이 문제는 크게 두 단계로 나누어 해결할 수 있습니다.

1단계 – 숫자 뒤집기: 숫자를 문자열로 변환한 뒤, 각 자릿수의 순서를 반전시키고 다시 숫자로 되돌립니다. 단항 연산자 +를 사용하면 문자열을 손쉽게 숫자형으로 변환할 수 있습니다.

2단계 – 소수 판별: 뒤집힌 숫자가 소수인지 검사합니다. 효율성을 위해 제곱근까지만 나누어 보면 충분합니다. 어떤 수 n이 2부터 √n 사이의 어떤 수로도 나누어떨어지지 않는다면, 그보다 큰 약수는 존재할 수 없기 때문입니다.

예제 코드

아래는 위 로직을 구현한 전체 코드입니다.

const num = 13;

// 숫자를 뒤집는 함수
const findReverse = (num) => {
   return +num
   .toString()
   .split('')
   .reverse()
   .join('');
};

// 소수 여부를 판별하는 함수
const isPrime = (num) => {
   let sqrtnum = Math.floor(Math.sqrt(num));
   let prime = num !== 1;
   for(let i = 2; i < sqrtnum + 1; i++){
      if(num % i === 0){
         prime = false;
         break;
      };
   };
   return prime;
}

// 두 함수를 조합하여 최종 결과 도출
const isReversePrime = num => isPrime(findReverse(num));

console.log(isReversePrime(num));

코드 설명

findReverse 함수는 숫자를 toString()으로 문자열로 바꾼 후, split('')으로 한 글자씩 분리하고 reverse()로 순서를 뒤집은 다음, join('')으로 다시 합쳐 최종적으로 숫자를 반환합니다.

isPrime 함수는 1을 소수에서 제외하기 위해 초기값을 num !== 1로 설정하고, 2부터 입력값의 제곱근까지 반복하며 나머지가 0이 되는 경우가 있으면 소수가 아니라고 판단합니다.

출력 결과

true

13을 뒤집으면 31이 되고, 31은 소수이므로 콘솔에는 true가 출력됩니다.