큐 합치기(Queue Weaving)

강명모(codingBear)·2022년 2월 24일
0

algorithm_JavaScript

목록 보기
19/36
post-thumbnail

References

아래 링크의 강의 중 Section 18. Underwater Queue Weaving의 내용을 추려 이번 글을 작성하였습니다.
The Coding Interview Bootcamp: Algorithms + Data Structures on Udemy


Solution

// ./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문을 돌면서 sourceOnesourceTwo에서 값이 undefined이 아니라면 remove()로 잘라내어 새로운 q에다 add한다.

profile
front-end 분야를 중점으로 공부 중!🐣

0개의 댓글