IF - 소수찾기(실패)

Goody·2021년 6월 15일
0

알고리즘

목록 보기
117/122
post-custom-banner

문제

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


예시

InputOutput
"17"3
"011"2

풀이 및 회고

  • 알고리즘 포스팅을 오랜만에 하는데, (풀이는 매일 했지만) 인프런에서 DFS 문제를 여러 개 풀고도 프로그래머스에서 관련 문제를 못 풀고 있어서 포스팅을 하게 됐다.. 일단 정확성 체크에서 5/12 개를 맞았다.
  • 내 풀이는 주어진 문자열을 DFS 알고리즘을 이용하여 모든 경우의 수를 구한 다음, Set 자료구조로 중복을 제거하려 했다.
  • 다시 Set 을 배열로 바꾼 다음 각 원소마다 소수 판별 함수를 돌리면 될 것 같았다.
  • 그러나 DFS에서 모든 경우의 수를 구하는 데에 실패했다.
  • "011" 의 경우 "110" 이, "117" 의 경우 "171" 과 같은 경우의 수를 찾아내지 못하고 있었다.
  • 뭔가 순열을 이용하면 풀 수 있을것도 같은데, 조만간 다시 도전해봐야겠다.

코드

function solution(numbers) {
    var answer = 0;
    const ch = Array.from({length:numbers.length}, ()=>0);
    let temp = [];
    const myArr = [];
   const DFS = (L) => {
       if(L === numbers.length){
           temp = [];
       }
           for(let i = 0; i < numbers.length; i++) {
               if(ch[i] === 0) { 
                        ch[i] = 1;
                        temp.push(numbers[i]);
                        myArr.push(Number(temp.join("")));
                        DFS(L+1);
                        ch[i] = 0;
               }
           
       }
   }
    DFS(0);
    const mySet = new Set(myArr);
    const nums = (Array.from(mySet));
    nums.forEach((num) => {
        if(isPrime(num)) answer++;
    })
    return answer;
}

const isPrime = (num) => {
    if (num === 0 || num === 1 || num === 2) return false;
     for(let i = 2; i < Math.floor(Math.sqrt(num)); i++) {
        if(num % i === 0) return false;
    }
    return true;
}
post-custom-banner

0개의 댓글