관리 메뉴

cococo-coding

[C++ 풀이] 10866번. 덱 본문

[BOJ] 코드 모음/C++_learning 문제집

[C++ 풀이] 10866번. 덱

_dani 2024. 1. 19. 03:47

 

풀이

덱(Deque)은 double ended queue 자료구조로

큐(Queue)가 앞뒤로 데이터 추가 및 삭제가 가능해진 구조이다.

 

덱의 기본적인 함수를 이용해볼 수 있는 문제이다.

명령은 총 8가지가 있으며, 각 명령에 따라 필요한 동작을 취한다.

 

1,2번은 입력받는 데이터를 num으로 선언하고 받았다.

1. push_front X (앞에 X 삽입)

num을 받아 덱의 앞에 삽입한다. dq.push_front(X);

2. push_back X (뒤에 X 삽입)

num을 받아 덱의 뒤에 삽입한다. dq.push_back(X);

3. pop_front (앞 데이터 삭제)

덱이 비어있지 않다면 삭제할 앞의 데이터를 dq.front()로 출력한 뒤에 dq.pop_front()로 삭제해준다. 

4. pop_back (뒤 데이터 삭제)

덱이 비어있지않다면 삭제할 뒤 데이터를 dq.back()으로 출력한 뒤에 dq.pop_back()으로 삭제해준다. 

5. size (덱의 사이즈)

덱의 사이즈를 리턴한다. dq.size()

6. empty (덱이 비어있는지 확인)

덱이 비어있는지 dq.empty()로 확인해서, 비어있다면 1을, 아니라면 0을 출력한다.

7. front (덱의 앞 데이터 리턴)

덱이 비어있으면 -1을 출력하고, 아니라면 덱의 앞 데이터를 dq.front()로 출력한다.

8. back (덱의 뒤 데이터 리턴)

덱이 비어있다면 -1을 출력하고, 아니라면 덱의 뒷 데이터를 dq.back()으로 출력한다.

코드

#include <iostream>
#include <deque>
using namespace std;
/*
    1. n을 입력받는다.
    2. n개의 명령에 따라 출력한다.
*/

int main() {
    //1
    int n;
    cin >> n;

    //2
    deque <int> dq;
    string s; //명령어 받을 s
    while (n--) {
        cin >> s;
        int num; //push_front와 push_back할 때 쓸 정수
        
        if (s == "push_front") {            
            cin >> num;
            dq.push_front(num);
        }
        else if (s == "push_back") {
            cin >> num;
            dq.push_back(num);
        }

        else if (s == "pop_front") {
            if (dq.empty()) cout << "-1" << '\n';
            else {
                cout << dq.front() << '\n';
                dq.pop_front();
            }
        }
        else if (s == "pop_back") {
            if (dq.empty()) cout << "-1" << '\n';
            else {
                cout << dq.back() << '\n';
                dq.pop_back();
            }
        }

        else if (s == "size") {
            cout << dq.size() << '\n';
        }
        else if (s == "empty") {
            if (dq.empty()) cout << "1" << '\n';
            else cout << "0" << '\n';
        }

        else if (s == "front") {
            if (dq.empty()) cout << "-1" << '\n';
            else cout << dq.front() << '\n';
        }
        else if (s == "back") {
            if (dq.empty()) cout << "-1" << '\n';
            else cout << dq.back() << '\n';
        }
    }

    return 0;
}