아래 링크의 강의 중 Section 18. Underwater Queue Weaving
의 내용을 추려 이번 글을 작성하였습니다.
The Coding Interview Bootcamp: Algorithms + Data Structures on Udemy
// ./queue.js
class Queue {
constructor() {
this.data = [];
}
add(record) {
this.data.unshift(record);
}
remove() {
return this.data.pop();
}
peek() {
return this.data[this.data.length - 1];
}
}
module.exports = Queue;
// ./index.js
const Queue = require("./queue");
function weave(sourceOne, sourceTwo) {
const q = new Queue();
// 새로운 q(third Queue)에 undefined값을 넣지 않기 위해, sourceOne 혹은 sourceTwo에서 peek 했을 때 값이 나온다면 while문으로 탐색
while (sourceOne.peek() || sourceTwo.peek()) {
// sourceOne.peek()이 값을 갖고 있다면(true), q에다 sourceOne.remove()한 값을 add.
if (sourceOne.peek()) {
q.add(sourceOne.remove());
}
if (sourceTwo.peek()) {
q.add(sourceTwo.remove());
}
}
return q;
}
queue.js
파일의 코드에 쓰인 peek()
은 remove()
method와 마찬가지로 data
의 맨 끝 값을 반환하나, 삭제하지는 않으므로 맨 끝 값을 조회할 때 쓰인다.
주어진 조건에 따라 while문
을 돌면서 sourceOne
과 sourceTwo
에서 값이 undefined
이 아니라면 remove()
로 잘라내어 새로운 q
에다 add
한다.