Data Structure & Algorithm

[알고리즘-JS] 숫자 뒤집고 소수 찾기

fnow 2022. 5. 3. 18:15
반응형

문제

N개의 자연수가 입력되면, 숫자를 뒤집고 뒤집은 숫자가 소수일 경우 출력하시오.

 

입력 예제

[30, 37, 109, 112, 43]

 

출력 예제

[3, 73, 211]

 

 

 

 

 

풀이

방법 1

// 소수 판별 함수
function isPrime(num) {
  if(num===1) return false; // 1은 소수가 아니다.

  // 해당 숫자를 2~자기자신만큼 나눴을 때
  // 중간에 나머지 없이 나뉘는 게 있다면 소수가 아님
  for (let i = 2; i < parseInt(num/2); 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; // 1의 자리
      res = res * 10 + t;
      x = parseInt(x/10);
    }

    if(isPrime(res)) answer.push(res);
  }

  return answer;
}

 

 

방법 2

function isPrime(num) {
  if(num===1) return false;

  for (let i = 2; i < parseInt(num/2); i++) {
    if(num % i === 0) return false;
  }

  return true;
}

function solution(arr) {
  let answer = [];

  for (let x of arr) {
    let res = Number(x.toString().split("").reverse().join(""));

    if(isPrime(res)) answer.push(res);
  }

  return answer;
}

for (let i = 2; i < parseInt(num/2); i++)
부분에서 num이 아닌 num/2인 이유 :
8을 예를 들면, 1x8, 2x4, (4x2, 8x1) 괄호 부분은 중복이므로 반만 순회해도 된다.

반응형