정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 2,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
const input = require("fs").readFileSync("ex.txt").toString().split("\n");
const command = input.slice(1).map((el) => el.split(" "));
const answer = [];
class Queue {
queue = [];
frontIdx = 0;
rearIdx = 0;
push(val) {
this.queue[this.rearIdx] = val;
this.rearIdx++;
}
pop() {
const val = this.queue[this.frontIdx];
if (val) {
delete this.queue[this.frontIdx++];
return val;
} else {
return -1;
}
}
size() {
return this.rearIdx - this.frontIdx;
}
empty() {
return this.size() === 0 ? 1 : 0;
}
front() {
return this.size() === 0 ? -1 : this.queue[this.frontIdx];
}
back() {
return this.size() === 0 ? -1 : this.queue[this.rearIdx - 1];
}
}
const queue = new Queue();
command.map(([c, n]) => {
switch (c) {
case "push":
queue.push(Number(n));
break;
case "pop":
answer.push(queue.pop());
break;
case "front":
answer.push(queue.front());
break;
case "back":
answer.push(queue.back());
break;
case "size":
answer.push(queue.size());
break;
case "empty":
answer.push(queue.empty());
break;
}
});
console.log(answer.join("\n"));