본문 바로가기
Algorithm/프로그래머스

Level2. 프로그래머스 스킬트리 - JavaScript

by 강깅꽁 2020. 10. 27.
반응형

 

function solution(skill, skill_trees) {
    var answer = 0;
    skill_trees.forEach( (skill_tree) => {
        let unlockSkill = 0;
        let rightSkillTree = true;
        for(let currenSkill of skill_tree){
            if( skill.includes(currenSkill) ){
                if( skill[unlockSkill] === currenSkill ) unlockSkill++;
                else {
                    rightSkillTree = false;
                    break;  
                } 
            }
        }
        if(rightSkillTree) answer++;        
    })
    return answer;
}

 

혹시나, 코드 먼저 보고 이해하고 싶으신 분들을 위해서 선 코드 후 설명으로 진행하도록 하겠습니다.

 

설명

해당 문제에서는 정해진 스킬트리가 존재합니다. 

그래서 유저들은 스킬트리에 영향을 받지 않는 스킬은 마음대로 찍을 수 있지만 스킬트리가 존재하는 스킬은 정해진대로 스킬을 찍어야 합니다. 

한 예로, 정해진 스킬트리가 CBD이고 유저가 찍고 싶은 스킬트리는 CBADF입니다. 

CBD 사이 혹은 이후에 A, F 스킬이 존재하지만 이 스킬들은 정해진 스킬트리가 없기 때문에 영향을 받지 않습니다. 

그렇다면 CBD만 남는데 정해진 스킬트리에 잘 부합합니다. 

 

또 다른 예로 유저의 AECB 스킬트리도 올바른 스킬트리 입니다. 

정해진 스킬트리 CBD에서 D는 없지만 C와 B가 올바른 순서로 찍혀있습니다. 

 

접근

 

1. 유저 스킬 트리들 순회

2. 유저 스킬 트리가 올바른 스킬트리인지 검증 

 

검증 과정

2-1 유저 스킬트리를 순회

2-2 유저 스킬트리에서 유저 스킬 하나를 가져와 정해진 스킬트리에 존재하는지 확인

2-3 정해진 스킬트리에 있다면 현재 배울 수 있는 스킬인지 확인 

2-4 배울 수 있다면 정해진 스킬트리에서 다음 스킬 unlock 배울 수 없다면 잘못된 유저 스킬트리