문제 정의
하나의 숫자를 인자로 받아, 그 숫자를 거꾸로 뒤집은 값이 소수(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가 출력됩니다.