PS/프로그래머스

[Level3][Javascript] 단어 변환

returnzero 2022. 6. 28. 11:09
function solution(begin, target, words) {
    var answer = 0;
    let Q=[];
    let floor=0;
    let adjacent=[];
    for(let i=0; i<=words.length;i++){
    adjacent.push([]);
    }
    let visited=new Array(words.length+1).fill(0);
    
    words.unshift(begin);
    //i->j
    for(let i=0; i<words.length;i++){
        for(let j=0;j<words.length;j++){
            adjacent[i][j] = singledifference(words[i],words[j])
        }
    }
    
    for(let i=0; i<adjacent[0].length; i++){
        if(adjacent[0][i]){
            Q.push([i,1]);
        }
    }
    
    visited[0]=1;
    // console.log(visited);
    // console.log(adjacent);
    while(Q.length){
        let [next, floor]= Q.shift();
        // console.log(next,floor,target);
        if(words[next]===target) {
            answer= floor;
            break;}
        
        if( floor>words.length+1) {
            answer=0;
            break;
        }
        floor++;
        for (let j=0; j<adjacent[0].length;j++){
            if(adjacent[next][j]===1 && visited[j]===0){
                visited[j]=1; 
                Q.push([j,floor]);
            }
        }
    }
    
   
    return answer;
}

function singledifference(worda, wordb){
    let diffcount=0;
    let charOfB= wordb.split("");
    let charOfA= worda.split("");
    for (let i =0; i<charOfB.length; i++){
        if(charOfB[i]!== charOfA[i]) diffcount++;
    }
    if (diffcount===1) return 1;
    else return 0;
}

BFS기법으로 풀었다. 우리는 가장 작은 floor를 원하기에 BFS로 풀어야 한다. DFS로 풀면 답이 안나올수도..