❓ -> ❓❗ 뒤집은 소수 : isPrime() 만들기, string 뒤집기

frenchkebab·2021년 8월 21일
0
post-thumbnail

자릿수의 합 문제와 동일하게 2가지 방법으로 풀 수 있다.


2가지 풀이


풀이1) 10으로 나눈 나머지

function isPrime(num) {
  if (num === 1) return false;
  for (let i = 2; i <= Math.sqrt(num); i++) {
    if (num % i === 0) return false;
  }
  return true;
}
function solution(arr) {
  const answer = [];
  for (x of arr) {
    let temp = 0;
    while (x) {
      temp *= 10;
      temp += x % 10;
      x = parseInt(x / 10);
    }
    if (isPrime(temp)) answer.push(temp);
  }
  return answer;
}

let arr = [32, 55, 62, 20, 250, 370, 200, 30, 100];
console.log(solution(arr));

항상 풀던 풀이 방법인데 의외로 다시 풀려니 헷갈렸다.


풀이2) string 내장 메소드 사용

    <script>
      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 temp = Number(x.toString().split('').reverse().join(''));
          if (isPrime(temp)) answer.push(temp);
        }
        return answer;
      }

      let arr = [32, 55, 62, 20, 250, 370, 200, 30, 100];
      console.log(solution(arr));
  • Math.sqrt(num) 까지만 확인해주면 되는 것을 몰랐었음

내 풀이) 풀이2와 같으나 isPrime 부분 수정해야함

function isPrime(num) {
  console.log(num);
  if (num === 1) return false;
  for (let i = 2; i < num; i++) {
    if (num % i === 0) return false;
  }
  return true;
}
function solution(arr) {
  const answer = [];
  for (x of arr) {
    let temp = x.toString().split('').reverse().join('');
    let num = Number(temp);
    if (isPrime(num)) answer.push(num);
  }
  return answer;
}

let arr = [32, 55, 62, 20, 250, 370, 200, 30, 100];
console.log(solution(arr));

풀이2 에서 언급했듯, i < num이 아니라, i < Math.sqrt(num) 이었어야 했다!

profile
Blockchain Dev Journey

0개의 댓글