코딩연습
[백준 알고리즘] Node.js 10866. 덱
니 뽀
2023. 7. 21. 11:51
1. 문제
https://www.acmicpc.net/problem/10866
10866번: 덱
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
2. 풀이
- Class 형태로 Deque를 만들어서 해결하였다.
const inputs = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n');
const N = +inputs.shift();
class Deque {
constructor(arr){
this.array = arr;
}
push_front(value){
let length = this.size();
if(!length) this.array.push(value);
else {
let tempArr = [value, ...this.array];
this.array = tempArr;
}
}
push_back(value){
this.array.push(value);
}
pop_front(){
let length = this.size();
if(!length) return -1
return this.array.shift();
}
pop_back(){
let length = this.size();
if(!length) return -1;
return this.array.pop();
}
size(){
return this.array.length;
}
empty(){
let length = this.size();
if(!length) return 1;
return 0;
}
front(){
let length = this.size();
if(!length) return -1
return this.array[0];
}
back(){
let length = this.size();
if(!length) return -1
return this.array[length-1];
}
}
const deque = new Deque([]);
let result = "";
for(let i = 0; i < N; i++){
const [text, num] = inputs[i].split(' ');
switch(text){
case "push_front":
deque.push_front(+num);
break;
case "push_back":
deque.push_back(+num);
break;
case "pop_front":
result += `${deque.pop_front()}\n`;
break;
case "pop_back":
result += `${deque.pop_back()}\n`;
break;
case "size":
result += `${deque.size()}\n`;
break;
case "empty":
result += `${deque.empty()}\n`;
break;
case "front":
result += `${deque.front()}\n`;
break;
case "back":
result += `${deque.back()}\n`;
break;
}
}
console.log(result);
3. 정리
1) 덱(Deque)이란?
- 큐(Queue)와 스택(Stack)의 특징을 모두 가지고 있는 자료구조.
- 큐처럼 선입선출(FIFO) 방식으로 동작할 수도 있고, 스택처럼 후입선출(LIFO) 방식으로 동작할 수 있다.
- 큐와 스택의 특징을 모두 가져서 양쪽에서 데이터를 삽입하거나 삭제할 수 있다!!