프로그래머스 소수 찾기 Javascript

한자리 숫자가 적힌 종이 조각이 흩어져있습니다. 흩어진 종이 조각을 붙여 소수를 몇 개 만들 수 있는지 알아내려 합니다.

각 종이 조각에 적힌 숫자가 적힌 문자열 numbers가 주어졌을 때, 종이 조각으로 만들 수 있는 소수가 몇 개인지 return 하도록 solution 함수를 완성해주세요.

소수 찾기Lv.2

42839

https://school.programmers.co.kr/learn/courses/30/lessons/42839

해설

주어진 숫자 문자열을 사용하여 연속된 숫자 문자열 중 소수가 될 수 있는 숫자를 찾습니다. 기본적으로 소수 판별, 순열 조합, 배열 연산 등의 이해가 필요합니다.

  • Name
    irPrime(num)
    Type
    Description

    주어진 숫자 Num이 소수인지 확인하는 역할을 합니다. 2부터 (Num-1)까지 나누어지는 검사하고, 나누어지면 false를 반환, 나누어지지 않으면 true를 반환합니다. 이를 통해 소수 여부를 판별할 수 있습니다.

  • Name
    getPermutation(arr, fixed)
    Type
    Description

    입력받은 배열 arr과 고정 문자 fixed를 사용하여 숫자 순열 조합을 생성하고, 해당 숫자가 소수이면 결과 배열 result에 추가합니다.

    • 재귀적 호출되어 모든 순열 조합을 생성합니다.
    • copyArr.splice(i, 1)를 사용하여 순열에 사용한 값을 제거하고, (!result.includes(+newNum) && isPrime(+newNum))을 조건문에 추가하여 결과 배열에 포함되지 않은 경우에만 판별 및 추가합니다.
  • Name
    solution
    Type
    Description

    getPermutation을 통해 소수 결과를 얻고, 최종적으로 result.length를 반환하여 생성된 소수의 개수를 알 수 있습니다.

소수 찾기

function solution(numbers) {
  let result = [];
  let nums = numbers.split("");

  function isPrime(num) {
    for (let i = 2; num > i; i++) {
      if (num % i === 0) {
        return false;
      }
    }
    return num > 1;
  }

  function getPermutation(arr, fixed) {
    if (arr.length >= 1) {
      for (let i = 0; i < arr.length; i++) {
        let newNum = fixed + arr[i];
        let copyArr = [...arr];
        copyArr.splice(i, 1);
        if (!result.includes(+newNum) && isPrime(+newNum)) {
          result.push(+newNum);
        }
        getPermutation(copyArr, newNum);
      }
    }
  }

  getPermutation(nums, "");
  return result.length;
}