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

woolee의 기록보관소·2022년 11월 18일
0

알고리즘 문제풀이

목록 보기
100/178

문제 출처

프로그래머스 lev2 - 소수 찾기

나의 풀이 (통과)

길이가 짧아서 재귀를 사용했다.
재귀를 사용해서 answer 배열에 담고 중복을 제거하기 위해 new Set을 사용했다.
그리고 나서, filter 메서드를 통해 소수를 판별해서 개수를 return 했다.

function solution(numbers) {
  let ch = Array.from({length:numbers.length}, () => 0);
  let tmp = [];
  let answer = [];

  function Dec(L) {
    if (tmp.length > 0) answer.push(Number(tmp.join('')));
    if (L>=numbers.length) return;
    else {
      for (let i=0; i<numbers.length; i++) {
        if (ch[i]===0) {
          ch[i]=1;
          tmp[L]=numbers[i];
          Dec(L+1);
          tmp.pop();
          ch[i]=0;
        }
      }
    }
  }
  Dec(0);

  return [...new Set(answer)].filter(v => {
    let cnt=0;
    for (let i=2; i<=Math.sqrt(v); i++) {
      if (v%i===0) cnt++;
    }
    if (v>1 && cnt==0) return true;
  }).length;
}

// console.log(solution("17"));
console.log(solution("011"));

다른 풀이

[프로그래머스] 소수 찾기 (level2, js)

문자열을 splice해서 재귀를 도는 방식

function solution(numbers) {
  var answer = [];
  let nums = numbers.split(''); 
  
  // 소수 판별
  const isPrimeNum = (num) => {
      if(num<=1) return false;
      for (let i = 2; i*i <= num; i++) {
          if (num % i === 0) return false;
      }
      return true;
  }
  
  // 순열 만들기
  const getPermutation = (arr, fixed) => {
      if(arr.length >= 1) {
          for (let i=0; i<arr.length; i++) {
              const newNum = fixed + arr[i];
              const copyArr = [...arr];
              copyArr.splice(i, 1);
              if (!answer.includes(+newNum) && isPrimeNum(+newNum)){
                  answer.push(+newNum) 
              }
              getPermutation(copyArr, newNum); 
          }
      }
  }
  
  getPermutation(nums, '');
  return answer.length;
}

// console.log(solution("17"))
console.log(solution("011"))
profile
https://medium.com/@wooleejaan

0개의 댓글