Programmers-スキルツリー


💻 スキルツリー


に質問


https://programmers.co.kr/learn/courses/30/lessons/49993

勘定科目

function solution(skill, skill_trees) {
    var answer = 0;
    var skillArr = skill.split('');

    skill_trees.map(x => {
        var isIncludesAny = false;
        for (let i = 0; i < skillArr.length; i++) {
            var isIncludes = x.indexOf(skillArr[i]);
            if (isIncludes !== -1) {
                isIncludesAny = true;
                if (i === 0) {
                    continue;
                } else {
                    var isIncludesPreskill = x.indexOf(skillArr[i - 1]);
                    if (isIncludesPreskill === -1) {
                        return;
                    }
                    if (isIncludesPreskill > isIncludes) {
                        return;
                    }
                }
            }
        }
        if (isIncludesAny === false) {
            answer++;
            return
        }
        answer++;
    })
    return answer;
}

let skill = "CBDK";
let skill_trees = ["CB", "CXYB", "BD", "AECD", "ABC", "AEX", "CDB", "CBKD", "IJCB", "LMDK"];

console.log(solution(skill, skill_trees));

¥¥АААААААААА

answer++になる条件について話します
1.スキル要素に保持されていないスキル要素のみのスキルツリー
2.スキル要素のうち、スキルの先頭要素があり、順番に学習している場合は、スキル要素にないスキルだけが気になります.
  • ここでは、スキル要素の2番目の開始が前スキル要素であることを確認します.
  • アプローチはスキルツリーのスキルを1つずつ取り出し、条件に合っているかどうかをチェックします.

  • スキルツリーの要素をxと呼び,xの中にスキル要素があるかどうかを確認する.
  • 要素がある場合、includesAnytrueに変換する:条件1確認
  • .

  • スキル要素の一番前の部分がある場合は、次のスキルを確認してください

  • 再度2つ目から、スキル要素があるか確認した場合、先行スキルがあるか確認します.
  • がない場合、次のスキルツリー
  • があれば、先行スキルが今よりスキル習得が遅い場合は、次のスキルツリー
  • すべて通過したのは条件を満たしているanswer++です.

    学識


  • アレイの複製は参照複製ではなく、深さ複製のためにslice()またはvar arrCopy = JSON.parse(JSON.stringify(arr))を複製する.

  • 配列の比較も上記のようにJSON.stringify(arr) === JSON.stringify(arr2)である.欠点は、オブジェクトをJSON形式に変換することであるので、gettersetterを含むオブジェクトに注意する.
  • map()関数は順番に配列されているので、breakまたはcontinueのようなfor文で返される文は通用しません.代わりにreturnのようなものがあります.