지식의모듈화

[DFS][Javascript] 양궁대회 본문

PS/프로그래머스

[DFS][Javascript] 양궁대회

returnzero 2022. 7. 28. 17:15
function solution(n, info) {
    let visited= new Array(info.length).fill(false);

    let scoreArr= new Array(info.length).fill(0);
    let answer =0;
    let answerarr;
    function dfs( score, current){

        let currentDifference=compareScore(info,score)
        if(answer<currentDifference){
            answer=currentDifference,
            answerarr=score;
        }
        for(let i=info.length-1; i>=0;i--){
            if(!visited[i] && current>= info[i]+1){
                visited[i]=true;
                dfs([...score.slice(0,i),info[i]+1,...score.slice(i+1)], current-(info[i]+1))
                visited[i]=false;
            }
        }
    }
    
    function compareScore(arr1,arr2){
        let scorePeach=0, scoreRyan=0;
        for(let i=0; i<arr1.length;i++){
            if(arr1[i]===arr2[i]){
                if(arr1[i]===0)
                    continue;
                else{
                    scorePeach+=(10-i)
                }
            }
            if(arr1[i] < arr2[i]){
                scoreRyan+=(10-i);
            }
            else{
                scorePeach+=(10-i);
            }
        }
        return scoreRyan-scorePeach;
    }
    
    dfs(scoreArr, n);
   
    if(answerarr==undefined){
        return [-1];
    }
    else{
        let check=0;
            answerarr.forEach(e=>{ if(e!==0) check+=e})
        if(n-check>0){
            answerarr[scoreArr.length-1]+=n-check
        }
    return answerarr;
    }
}

dfs문제이다...

 

dfs([...score.slice(0,i),info[i]+1,...score.slice(i+1)], current-(info[i]+1))

를 활용하게 되면 dfs에서 initialize할 필요없이 인자로만 전부 넘길 수 있다.