Algorithm/Inflearn

[알고리즘/인프런] 뒤집은 소수

개발자 김비숑 2023. 5. 29. 14:31
반응형

문제


N개의 자연수가 입력되면 각 자연수를 뒤집은 후 그 뒤집은 수가 소수이면 그 소수를 출력하 는 프로그램을 작성하세요.

 

예를 들어 32를 뒤집으면 23이고, 23은 소수이다. 그러면 23을 출 력한다. 단 910를 뒤집으면 19로 숫자화 해야 한다. 첫 자리부터의 연속된 0은 무시한다.

 

풀이


 #1

/**
 * 소수인지 확인하는 방법
 * 1. 2~n 떨어지는 수가 없는 경우
 * 2. 2~n/2까지 나눠서 떨어지는 수가 없는 경우
 * 2. 2~n의 제곱수까지 나눠서 떨어지는 수가 없는 경우 
 */

function isPrime(n) {
  if (n === 1) return false;
  for (let i = 2; i < Math.sqrt(n / 2); i++) {
    if (n !== i && n % i === 0) {
      return false;
    }
  }
  return true;
}

function solution(arr) {
  const N = arr.length;
  const answer = [];

  for (let num of arr) {
    const reversed = +[...(num + "")].reverse().join("");

    if (isPrime(reversed)) answer.push(reversed);
  }
  return answer;
}

 

#2

function solution(arr) {
  let answer = [];
  for (let num of arr) {
    let res = 0;
    while (num) {
      let t = num % 10; // 각 자릿수(뒷 자리부터)
      res = res * 10 + t;
      num = parseInt(num / 10); // 남은 숫자
    }
    if (isPrime(res)) answer.push(res);
  }
  return answer;
}
반응형