해당 포스팅은 인프런의 "자바스크립트 알고리즘 문제풀이" 강의 중 챕터6의 교육과정 설계 문제 풀이를 다룬다. 큐로 풀이하였다.
예제에서 필수과목 need = "CBA", 수업설계 plan = "CBDAGE"로 주어진다.
문자열 need를 queue로 만든 다음, plan에 대해 loop를 돌리면서 queue에 값(x)이 있는지를 확인한다.
만약 queue에 x가 있다면 필수과목이며 첫 번째 원소인지를 판별한다. 만약 첫 번째 원소라면 이수 순서가 맞고, 아니라면 순서가 안 맞아 틀린 설계이므로 NO를 출력한다. 그 다음 queue에서 x를 제거한다.
queue에 x가 없다면 필수과목이 아니므로 그냥 넘어간다.
loop를 종료하고, queue의 length가 0인지 아닌지를 판별한다.
0이 아니라면 필수 과목이 전부 포함된 수업 설계가 아니므로 NO를 출력한다.
0이라면 이수 순서도 맞고 필수 과목도 전부 포함된 수업 설계이므로 YES를 출력한다.
const need = "CBA";
const plan = "CBDAGE";
console.log(solution(need, plan));
function solution(need, plan) {
// 필수 과목 queue
const queue = need.split("");
// 수업 계획 loop
for (let x of plan) {
// x가 필수 과목일 시
if (queue.includes(x)) {
// x가 queue의 첫 번째 과목이 아닐 시
// 이수 순서가 잘 못 됨. 선수 과목을 안 들음
if (x !== queue.shift()) {
return "NO";
}
}
}
// 필수 과목을 전부 포함하지 않았을 시
if (queue.length > 0) return "NO";
// 이수 순서도 맞고 필수 과목도 전부 포함 -> 잘 설계한 계획!
return "YES";
}