해결방법
이번에도 대놓고 스택을 사용하라는 문제이다.
구조만 간단히 보고 넘어가겠다.
스택은 FILO구조로, 먼저 들어간 값이 맨 아래에 있고 마지막으로 들어간 값이 최상단에 있어 pop을 하게 되면 마지막으로 들어간 값부터 튀어나오는 자료구조이다.
스택 역시 STL로 이미 구현되어 있어 이를 활용했다.
정답 코드
#include <iostream>
#include <climits>
#include <cstdlib>
#include <sstream>
using namespace std;
struct Stack
{
int top;
int max;
int* array;
};
Stack* createStack(int max)
{
Stack* stack = new Stack();
stack->max = max;
stack->top = -1;
stack->array = new int[stack->max];
return stack;
}
void Push(Stack* stack, int x)
{
stack->array[++stack->top] = x;
}
int Pop(Stack* stack)
{
if (stack->top == -1)
return -1;
return (stack->array[stack->top--]);
}
int Size(Stack* stack)
{
return stack->top + 1;
}
int Empty(Stack* stack)
{
return (stack->top == -1);
}
int Top(Stack* stack)
{
if (stack->top == -1)
return -1;
return stack->array[stack->top];
}
int main()
{
int N;
cin >> N;
Stack* stack = createStack(N);
string cmd;
int value;
cin.ignore();
for (int i = 0; i < N; i++)
{
getline(cin, cmd);
stringstream ss(cmd);
string txt;
ss >> txt;
if (txt == "push")
{
ss >> value;
Push(stack, value);
}
else if (txt == "pop")
cout << Pop(stack) << endl;
else if (txt == "size")
cout << Size(stack) << endl;
else if (txt == "empty")
cout << Empty(stack) << endl;
else if (txt == "top")
cout << Top(stack) << endl;
}
delete[] stack->array;
delete stack;
return 0;
}
'코딩테스트' 카테고리의 다른 글
BOJ - 욱제는 결정장애야!! 14646 (0) | 2025.01.04 |
---|---|
BOJ - 수 찾기 1920 (0) | 2025.01.04 |
BOJ - 괄호 9012 (0) | 2025.01.04 |
BOJ - 큐 10845 (0) | 2025.01.04 |
BOJ - 카드2 2164 (0) | 2025.01.04 |