プログラマコード問題2021、02/19-Lv.3ワード変換


[質問]
2つの単語begin、target、単語の集合語があります.次のルールを使用して、beginからtargetに変換する最短変換プロセスを検索します.
一度に1つのアルファベット
  • しか置き換えられません.
  • 個の単語にしか変換できません.
  • たとえば、beginがhit、targetがcog、単語が[hot、dog、lot、log、cog]の場合、hit->hot->dot->dogなどの4つのステップで変換できます.
    2つの単語begin、target、および単語の集約語をパラメータとして指定する場合は、少なくともいくつかのステップを経てbeginをtargetに変換するには、解法関数を記述します.
    せいげんじょうけん
    各単語はアルファベット小文字のみで構成されます.
  • 各単語の長さは3または10を超えず、すべての単語の長さは同じである.
  • 個の単語は3個または50個以上の単語があり、重複する単語はありません.
  • beginとtargetは異なります.
  • が変換できない場合は0を返します.
  • I/O例
    begin
    target
    words
    return
    hit
    cog
    [hot, dot, dog, lot, log, cog]
    4
    hit
    cog
    [hot, dot, dog, lot, log]
    0
    I/O例説明
    例1
    問題の例は次のとおりです.
    例2
    単語にないため、ターゲットcogを変換できません.
    [回答]
    function solution(begin, target, words) {
      if(!words.includes(target)) return 0;
    
      const process = [begin];		// 변환 과정 담는 배열
      let idx = 0;				// words에서 사용할 index
    
      while(!process.includes(target)) {
        if(differenceCheck(begin, target, process)) {
          begin = target;
          process.push(begin);
        }
    
        if(differenceCheck(begin, words[idx], process)) {
          begin = words[idx];
          process.push(begin);
        }
    
        if(idx < words.length - 1) {
          idx++;
        }
        else {
          idx = 0;
        }
      }
    
      return process.length - 1;
    }
    
    // 다른 알파벳 개수 확인하는 함수
    function differenceCheck(str1, str2, arr) {
      const length = str1.length;
      let difference = 0;
    
      for(let i = 0; i < length; i++) {
        if(str1[i] !== str2[i]) {
          difference++;
        }
    
        if(difference > 1) break;
      }
    
      if(difference === 1 && !arr.includes(str2)) {
        return true;
      }
      else {
        return false;
      }
    }
    単語の中でアルファベットを変えて、targetができるかどうかを見つけなければなりません.
    まず、関数differenceCheckを作成して、単語の他のアルファベット数を検索します.
    見つかった単語をprocess配列に入れます.
    ずっと複文を回して、まず今の単語に変換してtargetと1つしか差がないことを確認したり、wordsの中で1つ差のある単語を探したりします.targetが見つかるまで繰り返します.
    位置がランダムに混ざっていれば、論理的に追加する必要があるものもありますが、これでも通れるなら、変換中の単語が順番に含まれているのかもしれません.
    まず,この論理は現在の問題では通過できるが,未完成の論理と考えられる.