10866번: 덱
첫째 줄에 주어지는 명령의 수 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());
const MX = 1000005;
class Deque {
constructor() {
this.arr = new Array(2 * MX + 1);
this.head = MX;
this.tail = MX;
}
push_front(data) {
this.arr[--this.head] = data;
}
push_back(data) {
this.arr[this.tail++] = data;
}
pop_front() {
this.head++;
}
pop_back() {
this.tail--;
}
front() {
return this.arr[this.head];
}
back() {
return this.arr[this.tail - 1];
}
size() {
return this.tail - this.head;
}
empty() {
if (this.head === this.tail) return true;
else return false;
}
}
let deque = new Deque();
let answer = [];
function solution() {
let n = +input.shift();
for (let i = 0; i < n; i++) {
let cmd = input.shift().split(" ");
switch (cmd[0]) {
case "push_front":
dequePush_front(+cmd[1]);
break;
case "push_back":
dequePush_back(+cmd[1]);
break;
case "pop_front":
dequePop_front();
break;
case "pop_back":
dequePop_back();
break;
case "size":
dequeSize();
break;
case "empty":
dequeEmpty();
break;
case "front":
dequeFront();
break;
default:
dequeBack();
break;
}
}
console.log(answer.join("\n"));
}
function dequePush_front(num) {
deque.push_front(num);
}
function dequePush_back(num) {
deque.push_back(num);
}
function dequePop_front() {
if (deque.empty()) answer.push(-1);
else {
let temp = deque.front();
deque.pop_front();
answer.push(temp);
}
}
function dequePop_back() {
if (deque.empty()) answer.push(-1);
else {
let temp = deque.back();
deque.pop_back();
answer.push(temp);
}
}
function dequeSize() {
answer.push(deque.size());
}
function dequeEmpty() {
if (deque.empty()) answer.push(1);
else answer.push(0);
}
function dequeFront() {
if (deque.empty()) answer.push(-1);
else answer.push(deque.front());
}
function dequeBack() {
if (deque.empty()) answer.push(-1);
else answer.push(deque.back());
}
solution();
'코딩테스트(알고리즘) > baekjoon' 카테고리의 다른 글
[baekjoon] 2468 안전영역 (Javascript, c++) (0) | 2022.07.05 |
---|---|
[baekjoon] 1012 유기농 배추 (C++,Javascript) (0) | 2022.07.04 |
[baekjoon] 10845 큐 (Javascript) (0) | 2022.06.30 |
[baekjoon] 10828 스택 (Javascript) (0) | 2022.06.30 |
[baekjoon] 1697 숨바꼭질 (Javascript,C++) (0) | 2022.06.29 |