나 개발자 진짜 되냐?

바킹독 0x07 문제1 / 백준 10866번 덱 본문

C++을 시작해봐요!/알고리즘을 공부해봐요!

바킹독 0x07 문제1 / 백준 10866번 덱

Snow Rabbit 2025. 12. 3. 18:27

12월이올시다.

벌써 25년도가 다 갔네요

작년에는 스파르타를 하고 있었는데 말이죠

한창 최종 플젝한다고 정신없을 때네요..

지금도 정신없는 건 매한가지지만.....

 

새로운 단원! 덱뒏ㄱ뒉

덱은 사실 dex.... 사실 나는 도적 쪽은 별로 선호 안 하긴 하는데

메랜하면서 전사하니까 부스탯이 dex여서 관심을 조금씩 가졌던 기억이 난다.

 

덱은 스택과 큐를 합쳐서

위에서도 빼고 넣고 밖에서도 빼고 넣고 하는 친구이다.

그래서 그런지 용어도 좀 더 많고 길다.

구분해 주기 위해서 인 거 같다.

 

그전에 문법 조금 공부하고 가자!


 

양쪽 다 들어가지는 친구기 때문에..

deque <int> DQ; 

덱 deque.라고 선언

 

DQ.push_front(n) = 맨 앞에 넣어주기

DQ.push_back(n) = 맨 뒤에 넣어주기

 

DQ.pop_front() = 맨 앞에 빼주기

DQ.pop_back() = 맨 뒤에 빼주기

 

DQ.back() = 맨 뒤에 친구

DQ.front() = 맨 앞에 친구

 

DQ.size() = 크기

DQ.empty() = 비었나요? 안 비었나요? ( T / F )

 

덱은 또 인덱스를 알면 출력이 가능하다는 사실!

 

DQ [n]  =  n번째 값 출력

DQ.insert() = 삽입

DQ.erase() = 삭제

DQ.clear() = 전체 삭제

 

ex ) 삽입 / 삭제

DQ.insert( DQ.begin()+1,33);

DQ.erase( DQ.begin+3);

 

오케이

한번 풀어보자.

 


 

이런 패턴 계속

스택, 큐에 써서

덱도 쉽게?! 풀긴 했는데

문제를 제대로 안 읽어서 ㅋㅋㅋㅋ

틀렸습니다.. 많이 나와버린..

 

#include <bits/stdc++.h>
using namespace std;

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

    deque<int> DQ;

    int n;
    cin >> n;
    while (n--)
    {
        string s;
        cin >> s;
        if (s == "push_back")
        {
            int a;
            cin >> a;
            DQ.push_back(a);
        }
        else if (s == "push_front")
        {
            int a;
            cin >> a;
            DQ.push_front(a);
        }
        else if (s == "pop_front")
        {
            if (!DQ.empty())
            {
                cout << DQ.front() << "\n";
                DQ.pop_front();
            }
            else
                cout << -1 << "\n";
        }
        else if (s == "pop_back")
        {
            if (!DQ.empty())
            {
                cout << DQ.back() << "\n";
                DQ.pop_back();
            }
            else
                cout << -1 << "\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";
        }
        else if (s == "size")
            cout << DQ.size() << "\n";
        else if (s == "empty")
        {
            if (DQ.empty())
                cout << 1 << "\n";
            else
                cout << 0 << "\n";
        }
    }
}

 

코드 길이가 길어서 이번에는

캡처가 아니라 코드를 붙여 넣었다.

 

이 방법도 괜찮을지도?!

 

pop_front / pop_back의 경우

빼고 나면 이미 무슨 숫자인지 모르기 때문에

front 혹은 back로 출력하고 빼면 된다.!

 

 

ㅋㅋㅋㅋ그래도 풀었다! 쉽게! 

오늘은 하나 했으니까 칼바람 아수라장 하러 가야지!!

고생했으!