문제이해

스킬트리의 문제는
스킬이 "CBD"로 주어지면
C -> B -> D 순으로 스킬을 배워야 한대요.

로직

제가 생각한 풀이는
스킬들을 queue에 넣고
skill_trees들을 순차탐색하면서
스킬이 존재하고, 큐의 front에 있는 스킬인지 확인을 합니다.
front에 없다면 실패로 바로 탐색을 중지합니다.
그리고 실패했을때는 가능한 스킬트리의 수를 감소시켜줬습니다.

저는 체크를 할때 copyedskillCheckArray라는 객체를 만들어서 체크를 했는데요.
skill.inludes(element)를 통해서 skill이 문자열이니까요. 문자열에 문자가 포함되어있는지 체크를 하는 방법이 더 깔끔했네요. 이러면 더 구현방법이 조금 달라질 것 같습니다.

code

       for(const element of tree){
           if(skillQueue.length && skill.inludes(element)){
              if(skillQueue[0] === element){
                   skillQueue.shift();
               }else{
                   flag = true; 
                   break;
               }
           }

       } 

javascript 풀이입니다.

function solution(skill, skill_trees) {
    var answer = skill_trees.length;
    const skillCheckArray = [];

    for( const one of skill){
        skillCheckArray.push(one);
    }

    for(const tree of skill_trees){
       let flag = false;
       const skillQueue = skillCheckArray.slice(); 
       const copyedskillCheckArray = {};
       for(const skill of skillCheckArray){
           copyedskillCheckArray[skill] = true;
       } 


       for(const skill of tree){
           if(skillQueue.length && copyedskillCheckArray[skill]){
              if(skillQueue[0] === skill){
                   skillQueue.shift();
               }else{
                   flag = true; 
                   break;
               }
           }

       } 

       if(flag){
           answer--;
       } 
    }

    return answer;
}