스택 자료구조에 대해 알고 있으면 쉽게 풀 수 있는 문제입니다.
스택(Stack)은 후입선출(LIFO, Last-In First-Out) 방식을 가지고 있습니다. 그래서 가장 나중에 들어온 요소가 가장 먼저 나가게 됩니다.
프링글스 과자를 생각하면 편합니다. 과자를 넣을 땐 가장 안쪽부터 쌓이지만, 먹을 땐 가장 위에 있는 것부터 먹게 됩니다.
#include <iostream>
int main()
{
std::cin.tie(NULL);
std::ios_base::sync_with_stdio(false);
int n;
std::cin >> n;
int* stack = new int[n];
for (int i = 0; i < n; i++)
stack[i] = -1;
int stack_Top = -1;
for (int i = 0; i < n; i++)
{
int commandN, num;
std::cin >> commandN;
switch (commandN)
{
case 1:
std::cin >> num;
stack_Top++;
stack[stack_Top] = num;
break;
case 2:
if (stack_Top == -1)
std::cout << "-1\n";
else
{
std::cout << stack[stack_Top] << "\n";
stack[stack_Top] = -1;
stack_Top--;
}
break;
case 3:
std::cout << stack_Top + 1 << "\n";
break;
case 4:
if (stack_Top == -1)
std::cout << "1\n";
else
std::cout << "0\n";
break;
case 5:
if (stack_Top == -1)
std::cout << "-1\n";
else
std::cout << stack[stack_Top] << "\n";
break;
}
}
return 0;
}