본문 바로가기
👩‍💻 Programming/Algorithms & Data Structures

큐 합치기(Queue Weaving)

by codingBear 2022. 4. 5.
728x90
반응형

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한다.

728x90
반응형

'👩‍💻 Programming > Algorithms & Data Structures' 카테고리의 다른 글

순환 리스트(Circular List)  (0) 2022.04.05
연결 리스트(Linked Lists)  (0) 2022.04.05
스택으로 큐 만들기(Create Queue with Stacks)  (0) 2022.04.05
스택(Stacks)  (0) 2022.04.05
큐(The Queue)  (0) 2022.04.05

댓글