[프로그래머스] 스킬트리
// https://school.programmers.co.kr/learn/courses/30/lessons/49993
function solution(skill, skill_trees) {
    // 배열로 비교하기 위한 배열화 작업
    const split_skill = skill.split('');
    const split_skill_trees = skill_trees.map(skillTree => skillTree.split(''));
    // skill에 존재 하지 않는 스킬은 순서와 상관없기 때문에 필터로 제거하여 스킬트리에 존재하는것만 남기기
    const filterItem = split_skill_trees.map(skillTree =>
        skillTree.filter(skill=> split_skill.includes(skill))
    )
    // 조건에 맞는 경우의 합이기때문에 reduce로 작성하였음.
    return filterItem.reduce((acc,cur) => {
        // 트리 순서에 맞는지 아닌지 확인하기위한 boolean 변수 선언
       let check = false;
        
        for(let i = 0; i < split_skill.length; i ++){
            // 트리 순서를 기준으로 반복문 실행
            if(!cur[i]) {
                // 유저들이 만든 스킬트리와 트리길이가 동일하지 않는 경우도 존재한다.(끝까지 다안배우는경우)
                // 만약 다음 순서가 존재하지 않는다면 이전값은 모두 통과한 상태이기때문에 true 재선언 후 반복문 탈출
                check = true;
                break;
            }
            
            if(split_skill[i] !== cur[i]){
                // 트리와 유저 스킬트리의 동일한 index의 값이 없다면 다른 순서이기때문에 false 재선언후 탈출
                check = false
                break;
            } else {
                // 동일한 경우라면 true
                check = true;
            }
        }
        
        // 트리순서에 맞다면 갯수 + 1 아니라면 이전값 return
        return check ? acc = acc + 1 : acc
    },0)
}