성능 요약
메모리: 12736 KB, 시간: 204 ms
분류
자료 구조, 스택
문제 설명
정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 다섯 가지이다.
push X: 정수 X를 스택에 넣는 연산이다.
pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 스택에 들어있는 정수의 개수를 출력한다.
empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
배열과 배열의 기능을 구현한다는 생각을 하였고 LIFO 구조로 생각하니 쉽게 풀린 문제였다.
const fs = require('fs').readFileSync('/dev/stdin');
const inputData = fs.toString().trim().split('\n');
class Stack {
constructor(maxSize){
this.queue = [];
this.answer = [];
}
push(num) {
this.queue.push(num);
}
pop() {
// 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
const pop = this.queue.pop();
this.answer.push(pop || -1);
}
size() {
// 스택에 들어있는 정수의 개수를 출력한다.
const size = this.queue.length;
this.answer.push(size);
}
empty() {
// 스택이 비어있으면 1, 아니면 0을 출력한다
const size = this.queue.length;
this.answer.push(size === 0 ? 1 : 0);
}
top() {
// 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
const top = this.queue[this.queue.length - 1];
this.answer.push(top || -1);
}
}
const Solved = (inputData) => {
const [_, ...inputs] = inputData;
const stack = new Stack();
inputs.forEach((el) => {
const [method , arg] = el.split(' ');
if(arg) {
stack[method](Number(arg));
} else {
stack[method]();
}
});
console.log(stack.answer.join('\n'))
};
Solved(inputData);