[백준] 스택

DongEun·2023년 5월 27일
1
post-thumbnail

[Silver IV] 스택 - 10828

문제 링크

문제 해설

성능 요약
메모리: 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);
profile
다채로운 프론트엔드 개발자

0개의 댓글