‡ CODING TEST STUDY ‡/º 백준

[백준 10866번 C++] 덱

Trudy | 송연 2023. 9. 13. 18:41

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

 

10866번: 덱

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

www.acmicpc.net


 

덱.. 덱에 대해 알아보자

 

https://travelbeeee.tistory.com/60

 

[C++] 덱 자료구조 & STL Deque Library 기본 명령어 정리

안녕하세요, 여행벌입니다. 오늘은 자료구조 덱과 덱을 지원해주는 C++ STL deque library에 대해서 알아보겠습니다. 1. Deque(덱)이란? Double-ended Queue의 약자로 Queue에 양쪽에서 삽입, 삭제가 다 이뤄질

travelbeeee.tistory.com

 

Deque은  Double-ended Queue의 약자!

큐와 거의 비슷한데, 큐는 앞에서 pop, 뒤에서 push를 한다면

덱은 앞뒤에서 삽입, 삭제가 모두 이뤄질 수 있다

 

덱 또한 #include <deque>을 통해서 라이브러리를 불러올 수 있다

 

<deque>의 메서드를 살펴보면

스택, 큐와 비슷하지만,  앞뒤 삽입 삭제를 구분해줘야하기 때문에 방향마다 두개씩 존재함!

- dq.push_front(ele);

- dq.push_back(ele);

- dq.pop_front();

- dq.pop_back();

 

큐와 동일하게 front, back의 원소를 출력할 수 있음

- dq.front();

- dq.back();

 

큐, 스택과 동일하게 empty와 size를 출력할 수 있음

-  dq.empty();

- dq.size();

 

#include <iostream>
#include <queue>
#include <string>

using namespace std;

int main()
{
    cin.tie(NULL);
    cin.sync_with_stdio(false);
    
    int n, m; 
    string s;
    cin >> n;
    
    deque<int> dq;
    for(int i=0; i<n; i++){
        cin >> s;
        if(s == "push_front"){
            cin >> m;
            dq.push_front(m);
        }
        else if(s == "push_back"){
            cin >> m;
            dq.push_back(m);
        }
        else if(s == "pop_front"){
            if(dq.empty()) cout << "-1\n";
            else {
                m = dq.front();
                cout << m << "\n";
                dq.pop_front();
            }
        }
        else if(s == "pop_back"){
            if(dq.empty()) cout << "-1\n";
            else {
                m = dq.back();
                cout << m << "\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";
            cout << dq.front() << "\n";
        }
        
        else if(s == "back"){
            if(dq.empty()) cout << "-1\n";
            cout << dq.back() << "\n";
        }
    }
   
    return 0;
}

예시 1은 출력이 잘 됐는데, 예시 2는 출력해보면 core dumped 오류가 떴다

 

???

아직 못 고침 

왜 틀린지 모르겠음