필수 과목의 순서대로 시간표를 올바르게 짰다면 "YES"
필수 과목의 순서대로 시간표를 짜지 않았다면 "NO"
ex) let main = "CBA"
꼭 C B A 의 순서대로 과목을 이수해야한다.
ex) let side = "CBDGEA"
중간의 과목이 낀 건 별개로 CBA의 순서만 지켜졌으면 올바르게 짠게 되는거다.
큐와 큐의 메서드에 대한 적절한 사용과 처음 적용해보는 includes 메서드를
사용해서 구현했다.
function solution(need, plan) {
let answer = "YES";
let queue = need.split("");
for (let x of plan) {
if (queue.includes(x)) {
if (x !== queue.shift()) return "NO";
}
}
if (queue.length > 0) return "NO";
return answer;
}
let a = "CBA";
let b = "CBDGEA";
console.log(solution(a, b));
혹시 읽으시는 분들에게 ,, 변수명 a , b 로 적어놓은 오만함을 용서해주길 바랍니다. . .
큐를 직접 구현해서 해결하는건 아니고 배열을 이용해 해결합니다.
참고로 제가 표현하는 필수과목은 need 안에 들어간 CBA를 의미합니다 .
let queue = need.split("");
(need = "CBA" 의 형태였다.)
queue의 값을 필수과목 의 배열 형태로 만들어줬습니다.
for (let x of plan) {
// for of 문으로 plan 순회
if (queue.includes(x)) {
// plan 순회 중 queue 안의 필수과목을 만난다면
if (x !== queue.shift()) return "NO";
// plan 에서 만난 필수과목 값 x 랑 필수과목만 모인 queue의 첫번째 값을 비교.
// 다르다면 "NO"
}
}
만약 이 상태로 걸리는거 없이 다 돌고 나온다면 초기값 "YES" 가 그대로 출력된다.
전부 다 거치고 난 뒤 마지막 if문
if (queue.length > 0) return "NO";
return answer;
결국 위의 로직을 문제없이 돈다면 필수과목. 즉 , queue의 length가 0 이 될 것이다.
하지만 위의 로직에서 제거하지 않은 필수과목이 그대로 남아있다면 ? "NO"
추가적으로 어떻게 남아있을 수 있냐함의 예제는
let a = "CBA";
let b = "CBDGE";
위와 같이 A 과목 자체를 넣지 않은 경우일 것이다.
한 마디
: 큐를 처음 접해보면서 개념은 굉장히 간단했지만 역시나 실제 문제에
적용해보는 것은 반복의 문제인 것 같다.