function solution(begin, target, words) {
var answers = [];
if (!words.includes(target)) return 0;
function dfs(word, level, visit) {
console.log('word', word)
console.log('level:', level)
for (let i = 0; i < word.length; i++) {
let slicedWord = sliceWord(word, i);
console.log('sliced word', slicedWord)
let temp = words.filter((e) => !visit.includes(e) && sliceWord(e, i) === slicedWord);
console.log('temp', temp)
if (temp.includes(target)) {
answers.push(level + 1);
console.log('end!!', answers)
return;
}
if (temp) {
temp.forEach((e, idx) => {
let visited = [...visit]
visited.push(e);
dfs(e, level + 1, visited)
})
}
}
}
dfs(begin, 0, [])
return answers.length < 1 ? 0 : Math.min(...answers);
}
function sliceWord(word, i) {
let wordArr = word.split('')
wordArr.splice(i, 1);
return wordArr.join('');
}
너비우선탐색
function solution(begin, target, words) {
var answer = 0;
if(!words.includes(target))return 0;
let visited=new Set();
let temp=[];
let queue=[];
queue.push(begin);
while(queue.length){
let cur=queue.shift();
visited.add(cur);
if(cur===target)return answer;
for(let i=0;i<cur.length;i++){
let slicedCurWord=sliceWord(cur,i);
let matched=words.filter((e)=>!visited.has(e)&&sliceWord(e,i)===slicedCurWord);
temp.push(...matched)
}
if(queue.length===0){
answer++;
queue.push(...temp);
temp=[];
}
}
return answer;
}
function sliceWord(word, i){
let wordArr=word.split('')
wordArr.splice(i,1);
return wordArr.join('');
}
깊이우선탐색
function solution(begin, target, words) {
var answers = [];
if(!words.includes(target))return 0;
function dfs(word,level,visit){
for(let i=0;i<word.length;i++){
let slicedWord=sliceWord(word,i);
let temp=words.filter((e)=>!visit.has(e)&&sliceWord(e,i)===slicedWord);
if(temp.includes(target)){
answers.push(level+1);
return;
}
temp.map((e,idx)=>{
let visited=new Set([...visit])
visited.add(e);
dfs(e,level+1,visited)
})
}
}
dfs(begin,0,new Set())
return answers.length<1?0:Math.min(...answers);
}
function sliceWord(word, i){
let wordArr=word.split('')
wordArr.splice(i,1);
return wordArr.join('');
}