관련 문제

10866번: 덱

Python으로 구현

Collection모듈에서 deque를 제공한다.

제공되는 함수들

그 외로 []를 이용한 접근이 가능하다.

from collections import deque

dq = deque()

for i in range(5):
    dq.append(i)
    dq.appendleft(i)
print(dq)

dq.pop()
dq.pop()
dq.popleft()
dq.popleft()
print(dq)

a = [11, 22, 33]
dq.extend(a)
dq.extendleft(a)
print(dq)

dq[0] = 0
dq[1] = 1
dq[2] = 2
dq.remove(22)
print(dq)

dq.clear()
print(dq)

C로 구현

배열로 queue를 구현한 것과 크게 다르지 않다.

위 문제를 C로 풀면 이런 코드가 작성된다.

#include <stdio.h>
#include <string.h>
#define MAX 100000
#define s(b) !strcmp(op, b)

int front, rear;
int queue[MAX];

int main() {
    int t, i, n;
    front = 0;
    rear = 0;
    char op[100];
    scanf("%d", &t);
    for (i = 0; i < t; i++) {
        scanf("%s", op);
        if (s("push_front")) {
            scanf("%d", &n);
            front = (--front + MAX) % MAX;
            queue[front] = n;
        } else if (s("push_back")) {
            scanf("%d", &n);
            queue[rear] = n;
            rear = ++rear % MAX;
        } else if (s("pop_front")) {
            if (rear == front)
                printf("-1\\n");
            else {
                printf("%d\\n", queue[front]);
                front = ++front % MAX;
            }
        } else if (s("pop_back")) {
            if (rear == front)
                printf("-1\\n");
            else {
                rear = (MAX + rear - 1) % MAX;
                printf("%d\\n", queue[rear]);
            }
        } else if (s("size")) {
            printf("%d\\n", (MAX + rear - front) % MAX);
        } else if (s("empty")) {
            printf("%d\\n", (front == rear) ? 1 : 0);
        } else if (s("front")) {
            if (front == rear)
                printf("-1\\n");
            else
                printf("%d\\n", queue[front]);
        } else if (s("back")) {
            if (front == rear)
                printf("-1\\n");
            else
                printf("%d\\n", queue[(MAX + rear - 1) % MAX]);
        }
    }

    return 0;
}

C++에서 [STL] deque로 구현

생성자