// 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)
}
Comment