[프로그래머스] 소수만들기 JavaScript DFS 백트래킹

0

Problem Solving

목록 보기
28/49
post-thumbnail

https://school.programmers.co.kr/learn/courses/30/lessons/12977

DFS 백트래킹으로 조합을 구한뒤 array의 합이 소수면 된다.

// 소수 판별 함수
function isPrime(n){
    if(n <= 2){
        return true
    }
    for(let i = 2; i < Math.sqrt(n)+1 ; i++){
        if(n%i===0){
            return false
        }
    }
    return true
}

//solution
function solution(nums) {
    let answer = 0;
    let visited = new Array(nums.length).fill(0)
    // DFS (depth : 재귀 호출 횟수, index : 조합을 위해 인덱스 저장, result : 숫자 저장 array)
    function dfs(depth,index,result){
        if(depth === 3){
            if(isPrime(result.reduce((a,b)=>a+b))){
                answer++;
            }
            return
        }
        for (let i=index; i < nums.length; i++){
            
            if(!visited[i]){
                visited[i] = 1
                dfs(depth+1, i+1,[...result,nums[i]])
                visited[i] = 0
            }
           
        }
        return
    }
    
    dfs(0, 0, [])
    return answer
}

파이썬에서 자바스크립트로 갈아탄지 1일차인데 적응하기 너무 빡세다
그래도 문법이 파이썬 보다는 근본넘쳐서 재밌는듯

0개의 댓글