Algorithm

[백준 10866] 덱

moguogu 2021. 7. 28. 19:50

스택

문제 설명

image


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

명령어는 다음과 같다.

  • push_front X: 정수 X를 덱의 앞에 넣는다.
  • push_back X: 정수 X를 덱의 뒤에 넣는다.
  • pop_front: 덱의 가장 앞에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • pop_back: 덱의 가장 뒤에 있는 수를 빼고, 그 수를 출력한다. 만약, 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 덱에 들어있는 정수의 개수를 출력한다.
  • empty: 덱이 비어있으면 1을, 아니면 0을 출력한다.
  • front: 덱의 가장 앞에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • back: 덱의 가장 뒤에 있는 정수를 출력한다. 만약 덱에 들어있는 정수가 없는 경우에는 -1을 출력한다.

알고리즘

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

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

int main()
{    
    int num = 0;
    cin >> num;
    deque <int> q;
    while (num)
    {
        string function;
        cin >> function;

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

    return 0;
}

고찰

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

'Algorithm' 카테고리의 다른 글

[백준 10845] 큐  (0) 2021.07.28
[백준 11659] 좌표 정렬하기  (0) 2021.07.28
[백준 5430] AC  (0) 2021.07.28
[백준 10773] 제로  (0) 2021.07.27
[백준 7576] 토마토  (0) 2021.07.27