본문 바로가기
코딩테스트(알고리즘)/프로그래머스

[프로그래머스] 소수찾기 (Javascript)

by Cafe Mocha 2022. 6. 21.

코딩테스트 연습 - 소수 찾기 | 프로그래머스 (programmers.co.kr)

 

코딩테스트 연습 - 소수 찾기

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

programmers.co.kr


접근 : bf, 순열, set

 

해당 문제를 통해 순열, 조합을 다시 한번 구현해볼수 있었고 set에 대해서도 한번더 확인할 수 있는 좋은 문제였다.

 

순열

// 순열
function Permutation(arr, r) {
  const result = [];
  if (r === 1) return arr.map((num) => [num]);
  arr.forEach((fixed, index, org) => {
    const rest = [...org.slice(0, index), ...org.slice(index + 1)];
    const permutation = Permutation(rest, r - 1);
    const attached = permutation.map((numbers) => [fixed, ...numbers]);
    result.push(...attached);
  });
  return result;
}
//전체 순열
function GetAllPermutation (arr){
    const results=[];
    arr.forEach((value,index,origin)=>{
        results.push(...Permutation(origin,index+1));
    });
    
    return results;
    
}

 

조합

function Combination(arr, r) {
  const result = [];
  if (r === 1) return arr.map((num) => [num]);
  arr.forEach((fixed, index, org) => {
    const rest = org.slice(index+1);
    const combinations = Combination(rest, r - 1);
    const attached = permutation.map((numbers) => [fixed, ...numbers]);
    result.push(...attached);
  });
  return result;
}

Javascript

function solution(numbers) {
    var answer = 0;
    numbers= numbers.split("");
    

    let arr = GetAllPermutation(numbers);
    let permutationArr = [];
    for(let i=0;i<arr.length;i++){
        let temp = +arr[i].join("");
        permutationArr.push(temp);
    }
    
    let setArr = [...new Set(permutationArr)];

    
    for(let i=0;i<setArr.length;i++){
        let tmp = setArr[i];
       
        if(isPrime(tmp)){
            answer++;
        } else {
            continue;
        }
    }
    

    return answer;
}


function Permutation(arr, r) {
  const result = [];
  if (r === 1) return arr.map((num) => [num]);
  arr.forEach((fixed, index, org) => {
    const rest = [...org.slice(0, index), ...org.slice(index + 1)];
    const permutation = Permutation(rest, r - 1);
    const attached = permutation.map((numbers) => [fixed, ...numbers]);
    result.push(...attached);
  });
  return result;
}

function GetAllPermutation (arr){
    const results=[];
    arr.forEach((value,index,origin)=>{
        results.push(...Permutation(origin,index+1));
    });
    
    return results;
    
}

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