선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다.
예를 들어 선행 스킬 순서가
스파크 → 라이트닝 볼트 → 썬더
일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다.위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서
스파크 → 힐링 → 라이트닝 볼트 → 썬더
와 같은 스킬트리는 가능하지만,썬더 → 스파크
나라이트닝 볼트 → 스파크 → 힐링 → 썬더
와 같은 스킬트리는 불가능합니다.선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요.
제한사항
function solution(skill, skill_trees) {
// 스킬트리에 해당하는 문자열만 자를수있게 정규식을 만든다
const regex = new RegExp(`[^${skill}]`, "g");
// 정규식을 적용해 스킬트리에 해당하지않는 스킬들을 제외시킨다
const replace = skill_trees.map((e) => {
return e.replace(regex, "");
});
// 그후 나온 스킬트리가
// 만약 e의 길이만큼 자른 스킬트리하고 다르다면
// 스킬트리와 맞지않음 => false
// 같으면 true
const isPossible = replace.map((e) => {
return skill.substring(0, e.length) == e;
});
// 최종적으로 나온 배열을 filter를통해 true값만 남기고 그 길이를 반환
return isPossible.filter((e) => e).length;
}
처음에 for문 2개돌리면 어떨까 생각햇는데 코드가 너무 길어져서 정규식을 한번 써봣다
여기서 테스트케이스에 주어진
CBD
를 이용해 계속 잘라보면서
스킬트리가 아닌것만 제외하면 쉽겟다 싶어서 해당하는 케이스에 맞게 정규식을 만들고 map을 돌렸다