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

dev_jo·2022년 8월 29일
0

알고리즘 풀이

목록 보기
19/25
post-custom-banner

문제

소수찾기



문제풀이

const getPermutations = function (arr, selectNumber) {
    const results = [];
    if (selectNumber === 1) return arr.map((el) => [el]); 
    // n개중에서 1개 선택할 때(nP1), 바로 모든 배열의 원소 return. 1개선택이므로 순서가 의미없음.

    arr.forEach((fixed, index, origin) => {
      const rest = [...origin.slice(0, index), ...origin.slice(index+1)] 
      // 해당하는 fixed를 제외한 나머지 배열 
      const permutations = getPermutations(rest, selectNumber - 1); 
      // 나머지에 대해서 순열을 구한다.
      const attached = permutations.map((el) => [fixed, ...el]); 
      //  돌아온 순열에 떼 놓은(fixed) 값 붙이기
      results.push(...attached); 
      // 배열 spread syntax 로 모두다 push
    });

    return results; // 결과 담긴 results return
}
 
function isPrime(num) {
  
  if(num === 2) {
    return true;
  }
  
  for(let i = 2; i <= Math.floor(Math.sqrt(num)); i++){
    if(num % i === 0){
      // 한 번이라도 나누어 졌으니 소수가 아니므로 return false
      return false; 
    }
  }
  // 나눠진 수가 없다면 해당 수는 소수이므로 return true
  return true; 
}

function solution(numbers) {
    var answer = 0;
    var num = [... numbers];
    
    var arr = [];
    for (var l = 0; l < num.length; l++) {
        var combNum = getPermutations(num, l + 1);
        arr.push(...combNum);
    }

  
    var newArr = [];
    
    for (var i = 0; i < arr.length; i++) {
        var num = parseInt(arr[i].join(''));
        if (num != '0' && num != '1') newArr.push(parseInt(num));
    }
    
    var set = new Set(newArr);
    var setArr = [...set];
    
    var cnt = 0;
    for (var j = 0; j < setArr.length; j++) {
        var sosu = isPrime (setArr[j]);
            if (sosu == true) {
                cnt++;
            }
    }
    
     return cnt;
}
profile
To be a better developer!!
post-custom-banner

0개의 댓글