[백준] 스택 #10828

welchs·2022년 1월 3일
0

알고리즘

목록 보기
2/44
post-thumbnail

설명

JS의 경우 Stack 클래스를 구현하지 않고 일반 배열로 선언해서 풀어도 되지만 이번 문제도 자료구조 복습겸 Stack 클래스를 직접 구현해서 풀었다.
그나마 코드량을 줄일 수 있게 작성한 부분이 있어 아래에 적어 본다.

commands.forEach((c) => {
  const [command, value] = c.split(' ');
  if (command === 'push') stack[command](value);
  else answer += stack[command]() + '\n';
});

여기서 JS 객체의 성질을 이용해 stack[command]()로 함수를 실행시켜 if-else(또는 switch)문을 사용해 길어지는 조건부분을 클래스 멤버함수의 이름을 문제에서 주어진 command와 일치시켜 구현했다.

c++풀이는 c++에서 제공하는 stack을 사용했고 간단하게 if-else 구문을 이용했다.

Node.js 풀이

const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');

const N = Number(input[0]);
const commands = input.slice(1);

class Stack {
  constructor() {
    this.stack = [];
  }
  push(value) {
    this.stack.push(value);
  }
  pop() {
    if (this.size() === 0) return -1;
    return this.stack.pop();
  }
  top() {
    return this.size() ? this.stack[this.size() - 1] : -1;
  }
  size() {
    return this.stack.length;
  }
  empty() {
    return this.size() === 0 ? 1 : 0;
  }
}
const solution = (N, commands) => {
  const stack = new Stack();
  let answer = '';
  commands.forEach((c) => {
    const [command, value] = c.split(' ');
    if (command === 'push') stack[command](value);
    else answer += stack[command]() + '\n';
  });

  return answer;
};

console.log(solution(N, commands));

C++ 풀이

#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);
    
    stack<int> S;
    int N, value;
    string command;
    
    cin >> N;
    for (int i=0; i<N; i++) {
        cin >> command;
        if (command == "push") {
            int value; cin >> value;
            S.push(value);
        }
        else if (command == "pop") {
            if (S.empty()) cout << -1 << '\n';
            else {
                cout << S.top() << '\n';
                S.pop();
            }
        }
        else if (command == "size") cout << (int)S.size() << '\n';
        else if (command == "empty") cout << S.empty() << '\n';
        else if (command == "top") {
            if (S.empty()) cout << -1 << '\n';
            else cout << S.top() << '\n';
        }
    }

    return 0;
}
profile
고수가 되고 싶은 조빱

0개의 댓글