Baekjoon Review

[Silver 4] 10866번 덱

hanseongbugi 2023. 10. 13. 18:24

https://www.acmicpc.net/problem/10866

 

10866번: 덱

첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지

www.acmicpc.net

 

이 문제는 STL의 deque를 이용해서 큐를 만들면 해결할 수 있다.

string 객체를 생성해 입력을 받아 if 문을 통해 명령이 무엇인지 판단한다.

그 후 명령에 따라 deque의 함수를 호출하면 된다.

push_front와 push_back 명령의 경우 push_front와 push_back 함수를 사용한다.

pop_front와 pop_back의 경우 비어있는지 알 수 있는 empty를 사용하여 덱이 비어있는지 확인한 후 요소가 있다면

pop_front의 경우 가장 먼저 삽입된 요소를 알 수 있는 front 함수와 꺼내는 pop_front를 사용하고

pop_back의 경우 마지막에 삽입된 요소를 알 수 있는 back 함수와 꺼내는 pop_back을 사용한다.

 

size의 경우 size함수를 사용하고, empty의 경우 empty 함수를 사용한다.

마지막으로 front와 back의 경우 pop 명령에서 pop_front와 pop_back 함수를 제외하고 front의 경우 front, back의 경우 back함수를 사용한다.

 

#include<iostream>
#include<deque>
using namespace std;

int main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int N;
    cin>>N;
    deque<int> dq;
    for(int i = 0;i<N;i++){
        string command;
        cin>>command;
        if(command =="push_front"){
            int input;
            cin>>input;
            dq.push_front(input);
        }
        if(command =="push_back"){
            int input;
            cin>>input;
            dq.push_back(input);
        }
        if(command == "pop_front"){
            if(dq.empty()) cout<<-1<<'\n';
            else{
                int value = dq.front();
                dq.pop_front();
                cout<<value<<'\n';
            }
        }
        if(command == "pop_back"){
            if(dq.empty()) cout<<-1<<'\n';
            else{
                int value = dq.back();
                dq.pop_back();
                cout<<value<<'\n';
            }
        }
        if(command == "size"){
            cout<<dq.size()<<'\n';
        }
        if(command == "empty"){
            cout<<dq.empty()<<'\n';
        }
        if(command == "front"){
            if(dq.empty()) cout<<-1<<'\n';
            else{
                int value = dq.front();
                cout<<value<<'\n';
            }
        }
        if(command == "back"){
            if(dq.empty()) cout<<-1<<'\n';
            else{
                int value = dq.back();
                cout<<value<<'\n';
            }
        }
    }
}