https://www.acmicpc.net/problem/10828
제출 코드
#include <iostream>
#include <vector>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
string method;
vector<int> stack;
cin >> n;
for (int i = 0; i < n; i++)
{
cin >> method;
if (method == "push")
{
int a;
cin >> a;
stack.push_back(a);
}
else if (method == "pop")
{
if (stack.empty())
{
cout << "-1" << '\n';
continue;
}
cout << stack[stack.size() - 1] << '\n';
stack.erase(stack.begin() + stack.size() - 1);
}
else if (method == "size")
cout << stack.size() << '\n';
else if (method == "empty")
cout << (stack.empty()) << '\n';
else if (method == "top")
{
if (stack.empty())
{
cout << "-1" << '\n';
continue;
}
cout << stack[stack.size() - 1] << '\n';
}
}
}
C++ STL 라이브러리에 stack이 존재하긴 하지만 vector로 구현해보았다
#include <iostream>
using namespace std;
class Stack
{
private:
int *p_stack;
int idx;
public:
Stack(int n)
{
p_stack = new int[n];
idx = -1;
}
void push(int x)
{
p_stack[++idx] = x;
}
int pop()
{
return (idx == -1) ? -1 : p_stack[idx--];
}
int size()
{
return idx + 1;
}
int empty()
{
return (idx == -1) ? 1 : 0;
}
int top()
{
return (idx == -1) ? -1 : p_stack[idx];
}
};
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n;
string method;
cin >> n;
Stack stack(n);
while(n--)
{
cin >> method;
if (method == "push")
{
int input;
cin >> input;
stack.push(input);
}
else if (method == "pop")
cout << stack.pop() << '\n';
else if (method == "size")
cout << stack.size() << '\n';
else if (method == "empty")
cout << stack.empty() << '\n';
else if (method == "top")
cout << stack.top() << '\n';
}
}
stack 클래스를 직접 구현한 코드
구현하면서 알게 되었는데, 0부터 올라가는 i 값이 딱히 필요 없는 상황이라면 그냥 n번 반복하기 위해 while(n--)를 사용해도 된다(n번 반복 후에 0이 되면 false가 되어 while문을 탈출)
'Programing > 백준, 프로그래머스(C++)' 카테고리의 다른 글
[C++][백준 11866] 요세푸스 문제 0 (0) | 2025.01.08 |
---|---|
[C++][백준 10845] 큐 (0) | 2025.01.08 |
[C++][백준 10816] 숫자 카드2 (0) | 2025.01.07 |
[C++][백준 9012] 괄호 (0) | 2025.01.07 |
[C++][백준 2164] 카드2 (0) | 2025.01.07 |