본문 바로가기
코딩테스트(알고리즘)/baekjoon

[baekjoon] 10845 큐 (Javascript)

by Cafe Mocha 2022. 6. 30.

10845번: 큐 (acmicpc.net)

 

10845번: 큐

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net


접근 : 큐, 구현

 

Javascript로 직접 큐를 구현하고 함수형으로 표현

 

Javascript

let input = require("fs")
  .readFileSync("input.txt") //"/dev/stdin"
  .toString()
  .split("\n")
  .map((val) => val.trim());

let answer = [];

class Queue {
  constructor() {
    this.arr = [];
    this.head = 0;
    this.tail = 0;
  }
  push(data) {
    this.arr[this.tail++] = data;
  }
  pop() {
    return this.arr[this.head++];
  }
  size() {
    return this.tail - this.head;
  }
  empty() {
    if (this.head === this.tail) return true;
    else return false;
  }
  front() {
    return this.arr[this.head];
  }
  back() {
    return this.arr[this.tail - 1];
  }
}

let queue = new Queue();

function solution() {
  let n = +input.shift();

  for (let i = 0; i < n; i++) {
    let cmd = input.shift().split(" ");

    switch (cmd[0]) {
      case "push":
        queuePush(+cmd[1]);
        break;
      case "pop":
        queuePop();
        break;
      case "size":
        queueSize();
        break;
      case "empty":
        queueEmpty();
        break;
      case "front":
        queueFront();
        break;
      default:
        queueBack();
        break;
    }
  }
  console.log(answer.join("\n"));
}

function queuePush(num) {
  queue.push(num);
}

function queuePop() {
  if (queue.empty()) answer.push(-1);
  else answer.push(queue.pop());
}

function queueSize() {
  answer.push(queue.size());
}

function queueEmpty() {
  if (queue.empty()) answer.push(1);
  else answer.push(0);
}

function queueFront() {
  if (queue.empty()) answer.push(-1);
  else answer.push(queue.front());
}

function queueBack() {
  if (queue.empty()) answer.push(-1);
  else answer.push(queue.back());
}

solution();