먼저 추가한 데이터를 먼저 반환/삭제하는 선입선출(FIFO - First In First Out) 자료구조이다. 스택과는 반대의 개념을 가진다.
은행이나 병원에서의 번호표를 생각하면 쉽다! 번호표는 먼저 뽑는 순서이기 때문에 FIFO 자료구조이다. 백준 18258번을 통해 구현해보겠다!
const fs = require("fs");
const filePath = process.platform === "linux" ? "/dev/stdin" : "./input.txt";
let input = fs.readFileSync(filePath).toString().trim().split("\n");
const N = Number(input[0]);
let queue = [];
let result = [];
let front = 0;
for (let i = 1; i <= N; i++) {
let [cmd, value] = input[i].split(" ");
value = Number(value);
switch (cmd) {
case "push":
queue.push(value);
break;
case "pop":
if (front < queue.length) {
result.push(queue[front++]);
} else {
result.push(-1);
}
break;
case "size":
result.push(queue.length - front);
break;
case "empty":
result.push(front === queue.length ? 1 : 0);
break;
case "front":
result.push(queue.length > front ? queue[front] : -1);
break;
case "back":
result.push(queue.length > front ? queue[queue.length - 1] : -1);
break;
default:
break;
}
}
console.log(result.join("\n"));