mailgithub

백준 10828-stack

2024-04-09

문제

문제 링크

정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 다섯 가지이다.

push X: 정수 X를 스택에 넣는 연산이다.
pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
size: 스택에 들어있는 정수의 개수를 출력한다.
empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

풀이

const answers = [];
const [n, ...commands] = input;

function solution(n, commands) {
  const stack = [];

  const stackCommand = {
    push: (value) => {
      stack.push(value);
    },
    pop: () => {
      return stack.length === 0 ? -1 : stack.pop();
    },
    size: () => {
      return stack.length;
    },
    empty: () => {
      return stack.length === 0 ? 1 : 0;
    },
    top: () => {
      return stack.length === 0 ? -1 : stack.at(-1);
    },
  };

  for (i = 0; i < n; i++) {
    const [command, value] = commands[i].split(" ");
    if (command === "push") {
      stackCommand.push(parseInt(value));
    } else {
      answers.push(stackCommand[command]());
    }
  }

  console.log(answers.join("\n"));
}

설명

Stack 구현은 javascript Array method 를 활용했습니다.
구현해야할 push, pop, size, empty, top 을 구현 후,
for 문을 통해 필요한 내용을 순회, split 을 통해 문자열 자르기를 통해 값과 stack command 를 분리했습니다.
push 를 제외한 나머지 method 는 값을 출력해야하므로 반환값을 별도로 저장하고,
마지막엔 예제 출력에 맞도록 join("\n") 을 통해 줄바꿈 후 출력하는 방식을 적용했습니다.