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로 풀면 답이 안나올수도..