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('');
}

0개의 댓글