http://acmicpc.net/problem/10828
{코드}
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main()
{
stack<int> s;
int n, tmp;
string st;
cin >> n;
while (n--)
{
cin >> st;
if (st == "push")
{
cin >> tmp;
s.push(tmp);
}
else if (st == "top")
{
if (!s.empty())
{
cout << s.top() << "\n";
}
else
{
cout << -1 << "\n";
}
}
else if (st == "empty")
{
cout << s.empty() << "\n";
}
else if (st == "pop")
{
if (!s.empty())
{
cout << s.top() << "\n";
s.pop();
}
else
{
cout << -1 << "\n";
}
}
else if (st == "size")
{
cout << s.size() << "\n";
}
}
}
{설명}
이 문제는 스택 자료구조를 알면 굉장히 쉽게 풀 수 있는 문제입니다.
짧게 설명하자면, 스택은 들어온 순서의 반대로 나가는 (FILO-First in Last out)의 특성을 가진 자료구조입니다.
1 -> 2 -> 3의 순서로 들어오면 3 -> 2 -> 1로 나가는 것이죠.
이걸 표현하기 위해 스택은 배열에서 마지막 원소를 기준으로 작업한다고 생각하셔도 됩니다.
C++는 기본적으로 <stack> 헤더가 포함되어 있으며 문제를 풀기 위해 필요한 모든 메서드가 포함되어 있습니다.
위의 코드를 보시면 어떻게 구현되는지 쉽게 파악이 되실 것으로 생각됩니다.
참고로, empty는 스택이 비어있는지 아닌지를 알려주기 때문에 비어있으면 1 아니면 0을 반환합니다.
*파이썬은 리스트로 구현이 가능하며 pop이 마지막 원소를 반환하지만 c++에서 pop은 아무것도 반환하지 않습니다.
'알고리즘 공부 > BOJ백준 풀이' 카테고리의 다른 글
[백준 9012번-C++] 괄호 (0) | 2021.04.07 |
---|---|
[백준 9093번-C++/파이썬] 단어 뒤집기 (0) | 2021.04.07 |
[백준 19940번-파이썬/Python] 피자 오븐 (0) | 2021.02.14 |
[백준 19939번-파이썬/Python] 박 터뜨리기 (0) | 2021.02.13 |
[백준 11653번-파이썬/Python] 소인수분해 (0) | 2021.01.07 |