완전탐색 소수찾기 자바스크립트

HyosikPark·2020년 11월 23일
0

알고리즘

목록 보기
34/72
 function solution(numbers) {
    let answer = 0;
    let arr = numbers.split('')
    let set = new Set();
    
    numOfCase(arr,'')
    
    function numOfCase(arr,str) {
        if(arr.length) {
            for(let i = 0; i < arr.length; i++) {
                let copyArr = [...arr];
                copyArr.splice(i,1);
                numOfCase(copyArr ,str + arr[i])
            }
        }
        if(str > 0) set.add(+str);
    }
    
   outer: for(let e of set) {
            if(e == 1) continue
        for(let i = 2; i <= Math.sqrt(e); i++) {
            if(!(e % i)) continue outer;
        }
        answer++;
    }
    return answer;
}

모든 가능한 경우의 수를 찾는 재귀함수가 이해가 안돼서 괴로웠던 문제..
이해를 하고 나니 이 재귀를 만들어낸 사람이 엄청 대단하게 느껴졌다.
경우의 수를 다 찾고 겹치는 수를 없애기 위해 set에 저장하고,
다시 배열로 만들어 각 요소에 대해 소수를 체크해주면 해결된다.

0개의 댓글