Algorithm

[백준 10828] 스택

moguogu 2021. 7. 28. 19:52

스택

문제 설명

image

정수를 저장하는 스택을 구현하고 주어진 명령어를 처리하여 나오는 결과를 한 줄 씩 출력한다. 첫 줄에 명령어 실행 횟수를 입력받는다.

명령어는 다음과 같다.

  • push X: 정수 X를 스택에 넣는 연산이다.
  • pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 스택에 들어있는 정수의 개수를 출력한다.
  • empty: 스택이 비어있으면 1, 아니면 0을 출력한다.
  • top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.

알고리즘

테스트 케이스 수 만큼 명령어를 읽어 들이고 실행한다.

#include <stdio.h>
#include <iostream>
#include <string>
#include <algorithm>
#include <stack>
using namespace std;

int main()
{    
    int num = 0;
    cin >> num;
    stack<int> s;
    while (num)
    {
        string function;
        cin >> function;

        if (function.find("push") != string::npos)//stack에 넣기
        {
            int n;
            cin >> n;
            s.push(n);
        }
        else if (function.find("pop")!=string::npos)
        {
            if (s.empty())//비었으면 -1 출력
                cout << -1 << "\n";
            else//비어있지 않으면 값 출력
            {
                cout << s.top() << "\n";
                s.pop();
            }
        }
        else if (function.find("size") != string::npos)//크기 출력
        {
            cout << s.size() << "\n";
        }
        else if (function.find("empty") != string::npos)//비어있는 지 여부
        {
            if (s.empty())
                cout << 1 << "\n";
            else
                cout << 0 << "\n";
        }
        else if (function.find("top") != string::npos)//top 실행
        {
            if (s.empty())//비었으면 -1 출력
                cout << -1 << "\n";
            else//비어있지 않으면 값 출력
            {
                cout << s.top() << "\n";
            }
        }
        num--;
    }

    return 0;
}

고찰

stack구현이라서 stl 사용 여부가 제한 될 줄 알았는데 그냥 사용해도 되서 사용했다.
vector를 사용해서 만들면 될 것 같다.

'Algorithm' 카테고리의 다른 글

[백준 11866] 요세푸스 문제0  (0) 2021.07.28
[백준 1003] 피보나치 함수  (0) 2021.07.28
[백준 10845] 큐  (0) 2021.07.28
[백준 11659] 좌표 정렬하기  (0) 2021.07.28
[백준 10866] 덱  (0) 2021.07.28