algorithm
스킬 트리
nana-log
2023. 9. 27. 09:42
https://school.programmers.co.kr/learn/courses/30/lessons/49993
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(skill, skill_trees) {
var answer = 0;
skill_trees.forEach((skilltree)=>{
let possible = true;
let queue = [...skill]
for(let x of skilltree){
if(skill.includes(x) && x === queue[0]) queue.shift()
else if(skill.includes(x) && x !== queue[0]) {
console.log(skilltree, x, queue[0])
possible = false;
break;
}
}
if(possible) {
answer++
}
})
return answer;
}
입출력 예
skill | skill_trees | return |
"CBD" | ["BACDE", "CBADF", "AECB", "BDA"] | 2 |
위의 입출력 예로 설명하고자 한다
queue에 skill (CBD)을 담은 후, skill이 skill_trees의 x (B)를 포함하고 순서가 일치하면
queue에 담긴 첫번째 요소 (C)를 제거하고, 다음 요소 (B)랑 비교하게끔 queue.shift()를 사용했다
skill이 x를 포함하지만, 순서가 일치하지 않는 경우 (BACDE,BDA)는 불가능한 스킬트리이므로
true가 할당돼있는 변수 possible을 false로 바꿔준다
나머지 x는 비교할 필요가 없으므로 break
즉, 배열 skill_trees 각각의 요소를 순회한후 possible이 true이면 answer를 1 증가한다.