코딩테스트 문제풀이/inflearn

[인프런] Node.js / 섹션4 - 완전탐색(브루트포스) / 2. 뒤집은 소수

sangchu 2023. 1. 19. 11:26

각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 소수를 출력

첫 자리부터의 연속된 0은 무시

 

나의 풀이

function solution(arr) {
  let answer = [];
  let cnt;
  arr = arr.map((x) => Number(x.toString().split("").reverse().join(""))); // 뒤집기

  for (let i = 0; i < arr.length; i++) {
    cnt = 0;
    for (let j = 1; j <= arr[i]; j++) {
      if (arr[i] / j === Math.floor(arr[i] / j)) cnt++; // 나눠지는게 있으면 cnt++
    }
    if (cnt === 2) { // 나눠지는게 2개였으면 소수
      answer.push(arr[i]);
    }
  }

  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;
  // 곱셈에서 반절은 동일하므로 제곱근 써줌(나누기 2해도 됨)
  for (let i = 2; i <= parseInt(Math.sqrt(num)); i++) {
    if (num % i === 0) return false;
  }
  return true;
}
function solution2(arr) {
  let answer = [];
  for (let x of arr) {
    let res = 0;
    // 숫자 reverse 하는것을 직접 구현
    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));

강사님은 소수 구하는것을 함수로 분리해서 푸셨다.

그리고 숫자를 reverse하는것도 while문을 이용하셨다.

10으로 나눠 각 자리수를 구하고, res를 통해 reverse한 자릿수를 맞춰 주었다.