본문 바로가기

Algorithm

[완전탐색] 소수 찾기

< 문제 >

완전 탐색을 하기 위해서 케이스를 배열에 담고

splice를 이용하여서 재귀하는 방식을 이용하였다.

첫번째 인자에는 남은 케이스

두번째 인자에는 현재 타겟을 이용하였고,

남은 케이스의 길이를 반복하였다.

 

중복을 체크하기 위해서 Set을 이용하였는데,

has와 add 메소드를 파악해두자.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
function solution(numbers) {
    var answer = 0;
 
    var numberArray = numbers.split('');
    var checkNumber = new Set()
    recursion(numberArray,''); 
 
    function recursion(remainingNumberArr, targetNumber) { 
        if (targetNumber.length > 0) { 
            if (checkNumber.has(Number(targetNumber))=== false) { 
                checkNumber.add(Number(targetNumber)); 
                if (chkPrime(Number(targetNumber))) { 
                    answer++;
                }
            }
        }
        if (remainingNumberArr.length > 0) { 
            for (var i = 0; i< remainingNumberArr.length; i++) { 
                var t = remainingNumberArr.slice(0
                t.splice(i,1); 
                recursion(t,targetNumber + remainingNumberArr[i]); 
            }
        }
    }
 
    function chkPrime(num) {
        if (num < 2return false;
        if (num === 2return true;
        for (var i = 2; i <= Math.sqrt(num); i++) {
            if (num%i===0return false;
        }
        return true;
    }
    return answer;
}