문제
정수를 저장하고 입력으로 주어진 명령을 처리하는 스택을 구현하는 프로그램을 작성하십시오.
명령어는 총 5개입니다.
- 푸시 X: 정수 X를 스택에 푸시하는 작업입니다.
- pop: 스택에서 최상위 정수를 팝하고 해당 숫자를 인쇄합니다. 스택에 정수가 없으면 -1이 반환됩니다.
- 크기: 스택의 정수 수를 반환합니다.
- 비어 있음: 스택이 비어 있으면 1을 반환하고 그렇지 않으면 0을 반환합니다.
- top: 스택 맨 위에 정수를 인쇄합니다. 스택에 정수가 없으면 -1이 반환됩니다.
기입
첫 번째 줄에 지정된 명령의 수 N(1 ≤ N ≤ 10,000)이 주어집니다. 두 번째 줄부터 N개의 줄은 각각 명령을 받습니다. 지정된 정수는 1보다 크거나 같고 100,000보다 작거나 같습니다. 문제에 나열되지 않은 명령은 제공되지 않습니다.
누르다
인쇄해야 하는 명령이 주어질 때마다 한 줄에 한 번씩 인쇄됩니다.
법원 청문회
포인터 배열로 구현하려고 했지만 런타임 오류(InsufficientSpace)가 발생했습니다.
스택 라이브러리를 이용하여 간단한 구조로 변경했을 뿐입니다.
결정적인
// baekjoon no.10828
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
stack<int> stack;
int N; // 명령어의 수
cin >> N;
for (int i = 0; i < N; i++) {
string s;
cin >> s;
if (s == "push") {
int e;
cin >> e;
stack.push(e);
}
else if (s == "pop") {
if (stack.empty() == true) {
cout << -1 << "\n";
}
else {
cout << stack.top() << "\n";
stack.pop();
}
}
else if (s == "size") {
cout << stack.size() << "\n";
}
else if (s == "empty") {
if (stack.empty() == true) {
cout << 1 << "\n";
}
else {
cout << 0 << "\n";
}
}
else if (s == "top") {
if (stack.empty() == true) {
cout << -1 << "\n";
}
else {
cout << stack.top() << "\n";
}
}
}
}