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
구문을 이용했다.
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));
#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;
}