알고리즘/알고리즘 문제 풀이

(C++) 백준 10866번 - 덱

용꿀 2023. 3. 21. 22:47

문제 링크 : https://www.acmicpc.net/problem/10866

 

10866번: 덱

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

www.acmicpc.net

풀이

Deque의 다양한 메서드들을 사용하는 문제이다. 실버 4 문제치곤 전혀 어렵지 않은 문제이다.

하지만 예외 처리해줘야 할게 꽤 있고, 반복적인 코드들이 많아 실수하기는 쉬운 것 같다.

#include <iostream>
#include <deque>

using namespace std;

deque<int> D;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(0);    

    int n;
    cin >> n;
    while(n--){
        string s;
        cin >> s;
        if(s == "push_back"){
            int i;
            cin >> i;
            D.push_back(i);
        }else if(s == "push_front"){
            int i;
            cin >> i;
            D.push_front(i);
        }else if(s == "pop_back"){
            if(D.empty()) cout << -1 << "\n";
            else{
                int i;
                i = D.back();
                D.pop_back();
                cout << i << "\n";
            }
        }else if(s == "pop_front"){
            if(D.empty()) cout << -1 << "\n";
            else{
                int i;
                i = D.front();
                D.pop_front();
                cout << i << "\n";
            }
        }else if(s == "size"){
            cout << D.size() << "\n";
        }else if(s == "empty"){
            cout << D.empty() << "\n";
        }else if(s == "front"){
            if(D.empty()) cout << -1 << "\n";
            else cout << D.front() << "\n";
        }else{ // back
            if(D.empty()) cout << -1 << "\n";
            else cout << D.back() << "\n";
        }
    }
}