백준 #10828: 스택

문제

정수를 저장하고 입력으로 주어진 명령을 처리하는 스택을 구현하는 프로그램을 작성하십시오.

명령어는 총 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";
			}
		}
	}
}