문제: https://programmers.co.kr/learn/courses/30/lessons/49993
skill에 문자열
skill_trees에 문자열을 담은 array가 있다.
skill_trees문자열 중 skill문자열의 순서와 다르게 작성된 skill을 제외하고 제대로 된 문자열의 개수를 출력하는 문제.
skill의 맨 앞에 있는 문자가 아닌것이 skill_trees에 먼저 나오게 되면 안된다는 뜻이다.
skill_tree를 각 문자열을 순회하며 skill[0] (맨 앞 문자)와 같은지 판단하고 같다면 skill.shift()
,
아니라면, 근데? 아닌데 그 놈이 skill 뒤에있다?? 그러면, 앞의 스킬을 찍지 않고 뒤의 skill을 찍으려는 것이기 때문에 false를 반환해주면된다!
solution()
: check()
에서 true인 것만 count해주면 된다.
function solution(skill, skill_trees) {
let answer =0
skill_trees.forEach(tree=>{
if(check(skill,tree)) answer++
})
return answer
}
function check(skill,tree){
const skillArr=[...skill]
for(let char of tree){
if(char===skillArr[0]){
skillArr.shift()
}else if(skillArr.includes(char)){
return false
}
}
return true
}