[프로그래머스] 스킬 트리

박재윤·2021년 1월 25일
0

코테준비

목록 보기
23/25

문제 링크

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

나의 풀이

function solution(skill, skill_trees) {
    let answer = 0;
    
    const skillOrder = skill.split('').reduce((acc, curr, index) => {
        acc[curr] = index;
        return acc;
    }, {});
    
    const skillTreeMax = new Array(skill_trees.length).fill(-1);
    
    for (let i=0 ; i < skill_trees.length ; i++) {
        const skillTree = skill_trees[i];
        let able = true;
        for (const skill of skillTree) {
            if (skillOrder[skill] !== undefined) {
                if (skillOrder[skill] !== skillTreeMax[i]+1) {
                    able = false;
                    break;
                }
                skillTreeMax[i] = skillOrder[skill]
            }
            
        }
            
        if (able) {
            answer++;
        }
    }
    
    return answer;
}

풀이 회고

문제를 봤을 때 skill 변수에 주어져 있는 skill들에 레벨(?)을 줘서 확인을 하는 것이 좋겠다는 생각을 했고 index 값을 활용했다. 이후에 skill_trees를 확인하면서 현재 기술이 사용 가능한 것인지를 확인했다.

그런데 문제를 잘 못 읽어서 순서만 맞으면 중간 스킬 단계를 빼먹어도 된다고 생각했다. 이후에 4번 예시로 확인을 하고 대소비교를 하던 코드를 다음과 같이 바꿨다.

if (skillOrder[skill] !== skillTreeMax[i]+1) {
  able = false;
  break;
}

0개의 댓글

관련 채용 정보