문제설명
- 선행스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬
- ex) 선행스킬 순서가 A->B->C이면 B->A나 C->A->B와 같은 경우는 불가능
- 단, 선행스킬 순서에 없는 다른 스킬은 순서에 상관없이 가능
- 선행스킬 순서 skill과 유저들이 만든 스킬트리를 담은 배열 skill_trees
- 가능한 스킬트리 개수를 반환
제한조건
- 스킬은 알파벳 대문자로 표기, 모든 문자열은 알파벳 대문자로 구성
- 스킬 순서와 스킬트리는 문자열로 표기(ex. C->B->D = "CBD")
- skill의 길이는 1이상 26이하, 스킬은 중복해 주어지지 않음
- skill_trees의 길이 1이상 20이하 배열
- skill_trees의 원소는 스킬을 나타내는 문자열
- skill_trees의 원소는 길이 2이상 26이하인 문자열, 스킬은 중복해 주어지지 않음
풀이
function solution(skill, skill_trees) {
let check;
let result = [];
let answer = 0;
const skillArr = skill.split('').map((step,idx)=>[step,idx]);
skill_trees.map((step,idx)=>{
const stepArr = step.split('');
check = 0;
stepArr.map((instep,idx)=>{
for(let i=0;i<skillArr.length;i++){
if(instep === skillArr[i][0]){
if(skillArr[i][1] !== check){
result.push('fail');
check = -1;
break;
}else{
result.push('success');
++check;
}
}
else{
if(skill.indexOf(instep)===-1)
result.push('success');
}
}
})
if(result.some(res=>res==='fail')){
result = [];
}
if(result.length>0)
++answer;
})
return answer;
}
체크포인트
- 선행스킬 순서에 없는 스킬만 구성된 스킬트리 경우도 있음을 까먹지말자~