PS/Programmers

Programmers / Level 2 / 소수 찾기 / JS

KimMinJun 2022. 12. 27. 16:52

< 문제 바로가기 >

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

/**
 * 소수인지 판단하는 함수
 * 
 * @param {number} number 
 * @returns {boolean}
 */
 function isPrimeNumber(number) {
  if(number < 2) return false;

  for(let i=2; i<=Math.sqrt(number); i+=1) {
    if(number % i === 0) return false;
  }
  return true;
}

// 순열을 저장할 Set(), 중복제거를 위해 Set으로 선언
let permutationList = new Set();
/**
 * 모든 순열을 구하는 함수
 * 
 * @param {string[]} numbers 
 * @param {string} fixed 고정 값
 */
function getPermutation(numbers, fixed) {
  if(numbers.length === 0) return;

  for(let i=1; i<numbers.length; i+=1) {
    // 하나씩 더해주면서 고정 문자열로 만든다
    let nextFixed = fixed + numbers[i];
    let nextNumbers = [...numbers];
    // 고정 문자열 제외
    nextNumbers.splice(i, 1);

    if(isPrimeNumber(+nextFixed) === true) permutationList.add(+nextFixed);

    getPermutation(nextNumbers, nextFixed);
  }
}

function solution(numbers) {
  let answer = 0;

  numbers = numbers.split('');
  getPermutation(numbers, '');

  answer = permutationList.size;

  return answer;
}