N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면
그 소수를 출력하는 프로그램을 작성하세요. 예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다.
function isPrime(num){
if (num < 2) return false;
else if (num % 2 === 0) {
if (num !== 2) return false;
}
let i = 3;
while (i < num) {
if (num % i === 0) return false;
i++;
}
return true;
}
function solution(arr){
let answer=[];
for (let x of arr) {
let spt = x.toString().split('');
let reverse = 0;
for (let i = 0; i < spt.length; i++) {
reverse += spt[i]*Math.pow(10,i);
}
if (isPrime(reverse)) answer.push(reverse);
}
return answer;
}
let arr=[32, 55, 62, 20, 250, 370, 200, 30, 100];
console.log(solution(arr));
function isPrime(num){
if(num===1) return false;
for(let i=2; i<=parseInt(Math.sqrt(num)); i++){
if(num%i===0) return false;
}
return true;
}
function solution(arr){
let answer=[];
for(let x of arr){
let res=0;
while(x){
let t=x%10;
res=res*10+t;
x=parseInt(x/10);
}
if(isPrime(res)) answer.push(res);
}
return answer;
}
let arr=[32, 55, 62, 20, 250, 370, 200, 30, 100];
console.log(solution(arr));
Math.sqrt(num)
을 통해서 제곱근을 구할 수 있다는 점을 배웠다.
소수에 대한 이해도가 부족했던 것이 아쉽다. 제곱근까지만 판별해도 소수 여부를 판별할 수 있으나, num
전체를 판별에 사용했고, 다중 if
문을 통해서, 1인지, 짝수인지(그 중 2인지 여부), 그 외의 경우를 따로 계산하였으나, 정답의 경우 1인지 여부만 파악하고 같은 방식으로 판별해도 원하는 출력값을 얻을 수 있었다. 큰 차이는 없었겠지만 런타임 자체를 줄일 수 있도록 더 고민해야겠다.