정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
push X: 정수 X를 큐에 넣는 연산이다.
pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 큐에 들어있는 정수의 개수를 출력한다.
empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
15
push 1
push 2
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front
1
2
2
0
1
2
-1
0
1
-1
0
3
백준에 제출할 때에는,
const fs = require("fs");
const input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");
class Queue { //this로 접근, 조작, 호출
constructor() {
this.queue = [];
}
push(value) { //push X: 정수 X를 큐에 넣는 연산이다.
this.queue.push(value);
}
pop() { //pop: 큐에서 가장 앞에 있는 정수를 빼고,
//그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
return this.queue.length ? this.queue.shift() : -1; //삼항연산자
} //this.queue.length->큐의 길이 가져오기
size() { //size: 큐에 들어있는 정수의 개수를 출력한다.
return this.queue.length;
}
empty() { //empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
return this.queue.length === 0 ? 1 : 0; //삼항연산자
}
front() { //front: 큐의 가장 앞에 있는 정수를 출력한다.
//만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
return this.queue.length ? this.queue[0] : -1; //삼항연산자
}
back() { //back: 큐의 가장 뒤에 있는 정수를 출력한다.
//만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
return this.queue.length ? this.queue[this.queue.length - 1] : -1; //삼항연산자
}
}
const queue = new Queue();
const commandNum = parseInt(input[0]);
let output = "";
for (let i = 1; i <= commandNum; i++) {
const command = input[i].split(" ");
switch (command[0]) {
case "push":
queue.push(parseInt(command[1]));
break;
case "pop":
output += queue.pop() + "\n";
break;
case "size":
output += queue.size() + "\n";
break;
case "empty":
output += queue.empty() + "\n";
break;
case "front":
output += queue.front() + "\n";
break;
case "back":
output += queue.back() + "\n";
break;
}
}
console.log(output.trim());
처음 짜고 시간초과가 뜬 코드.
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
class Queue { //this로 접근, 조작, 호출
constructor() {
this.queue = [];
}
push(value) { //push X: 정수 X를 큐에 넣는 연산이다.
this.queue.push(value);
}
pop() { //pop: 큐에서 가장 앞에 있는 정수를 빼고,
//그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
return this.queue.length ? this.queue.shift() : -1; //삼항연산자
} //this.queue.length->큐의 길이 가져오기
size() { //size: 큐에 들어있는 정수의 개수를 출력한다.
return this.queue.length;
}
empty() { //empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
return this.queue.length === 0 ? 1 : 0; //삼항연산자
}
front() { //front: 큐의 가장 앞에 있는 정수를 출력한다.
//만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
return this.queue.length ? this.queue[0] : -1; //삼항연산자
}
back() { //back: 큐의 가장 뒤에 있는 정수를 출력한다.
//만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
return this.queue.length ? this.queue[this.queue.length - 1] : -1; //삼항연산자
}
}
const queue = new Queue();
let commandNum; //첫 번쨰에 입력하는 정수. 명령어의 개수
rl.on("line", function (line) {
if (!commandNum) {
commandNum = parseInt(line);
return;
}
const command = line.split(" "); //명령어와 명령어와 사용되는 값을 공백으로 분리
switch (command[0]) {//위에서 공백으로 분리했으므로 0번째 인덱스는 명령어,
case "push":
queue.push(parseInt(command[1]));//1번쨰 인덱스는 입력 값인데, parseInt를 써 정수로 변환
break;
case "pop":
console.log(queue.pop());
break;
case "size":
console.log(queue.size());
break;
case "empty":
console.log(queue.empty());
break;
case "front":
console.log(queue.front());
break;
case "back":
console.log(queue.back());
break;
}
});