[JS] 스킬트리

DARTZ·2023년 6월 12일
0

알고리즘

목록 보기
120/135

작성한 코드

function solution(skill, skill_trees) {
    var answer = 0;
    skill_trees.forEach((skill_tree) => {
        const can = new Set();
        can.add(skill[0]);
        answer += 1;
        for (let s = 0; s < skill_tree.length; s++) {
            if (skill.includes(skill_tree[s])) {
                if (!can.has(skill_tree[s])) {
                    answer -= 1;
                    break;
                } else {
                    if (skill.indexOf(skill_tree[s] < skill.length -1)) {
                        can.add(skill[skill.indexOf(skill_tree[s]) + 1]);
                    }
                };
            };
        };
    });
    
    return answer;
}

통과는 되었지만 불필요한 연산이 너무 많다고 생각됩니다. 그래서 다른사람의 코드를 살펴봤습니다.

다른 사람의 코드

function solution(skill, skill_trees) {
    function isCorrect(n) {
        let test = skill.split('');
        for (var i = 0; i < n.length; i++) {
            if (!skill.includes(n[i])) continue;
            if (n[i] === test.shift()) continue;
            return false;
        }
        return true;
    }    

    return skill_trees.filter(isCorrect).length;
}

문제 해결 아이디어입니다.

  • isCorrect 함수를 만들었습니다.
  • filter를 사용해서 각 문자열마다 가능한지 체크를 해줍니다.
  • 만약 skill에 없는 스킬이면 continue를 해준다.
  • 만약 skill에 있다면 skill에서 shift를 통해 선행 스킬과 비교한다.

filter에서 true와 false를 통해 갯수를 구하는 것, 콜백함수를 정의해주어서 filter를 사용하는 것을 배웠습니다.

profile
사람들이 비용을 지불하고 사용할 만큼 가치를 주는 서비스를 만들고 싶습니다.

0개의 댓글