[백준 10828번 - C++] 스택
알고리즘 공부/BOJ백준 풀이

[백준 10828번 - C++] 스택

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은 아무것도 반환하지 않습니다.