알고리즘 + 17

윤건호·2022년 10월 12일
0

알고리즘

목록 보기
17/23

필수과목 문제 (큐)

필수 과목의 순서대로 시간표를 올바르게 짰다면 "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 과목 자체를 넣지 않은 경우일 것이다.

한 마디
: 큐를 처음 접해보면서 개념은 굉장히 간단했지만 역시나 실제 문제에
적용해보는 것은 반복의 문제인 것 같다.

profile
더 배우고 싶은 프론트엔드 개발자 윤건호입니다.

0개의 댓글