문제

정수를 저장하는 덱(Deque)를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.

명령은 총 여덟 가지이다.

image.png

풀이

  1. 덱을 구현한다
  2. 처음 입력을 받고 위 push일 경우 int 값을 한번 더 받는다.
  3. 처음 입력받은 문자열에 따라서 각각 함수를 호출한다.
  4. 위 조건에 따라서 출력을 진행한다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_DEQUE_SIZE 20000

struct __duqueueType {
    int *data;
    int rear, front;
};

struct __duqueueType Deque;

void init_Deque(){
    Deque.data = (int*)malloc(sizeof(int)*MAX_DEQUE_SIZE);
    Deque.rear = 10000;
    Deque.front = 10000;
    return;
}

int empty(){
    return (Deque.rear == Deque.front ? 1 : 0);
}

void push_front(){
    int num;
    scanf("%d\\n", &num);
    Deque.data[++Deque.front] = num;
}

void push_back(){
    int num;
    scanf("%d\\n", &num);
    Deque.data[Deque.rear] = num;
    Deque.rear -= 1;
}

void pop_front(){
    if(empty()) {
        printf("-1\\n");
        return;
    }
    else
        printf("%d\\n", Deque.data[Deque.front--]);
}

void pop_back(){
    if(empty()) {
        printf("-1\\n");
        return;
    }
    else
        printf("%d\\n", Deque.data[++Deque.rear]);
}

void size(){
    printf("%d\\n", (Deque.front - Deque.rear));
}

void front(){
    if(empty()) {
        printf("-1\\n");
        return;
    }
    else{
        printf("%d\\n", Deque.data[Deque.front]);
    }
}

void back(){
    if(empty()) {
        printf("-1\\n");
        return;
    }
    else{
        printf("%d\\n", Deque.data[Deque.rear + 1]);
    }
}

void check(){
    char command[11];
    scanf("%s", command);
    if(!strcmp(command, "push_front")) push_front();
    else if(!strcmp(command, "push_back")) push_back();
    else if(!strcmp(command, "pop_front")) pop_front();
    else if(!strcmp(command, "pop_back")) pop_back();
    else if(!strcmp(command, "size")) size();
    else if(!strcmp(command, "empty")) {
        if(empty()) {
            printf("1\\n");
            return;
        }
        printf("0\\n");
    }
    else if(!strcmp(command, "front")) front();
    else if(!strcmp(command, "back")) back();
    
    
}

void print_debug(){
    printf("Deque = ");
    for(int i = Deque.rear + 1; i <= Deque.front; i++){
        printf("%d ", Deque.data[i]);
    }
    printf("\\n");
}

int main() {
    int N;
    init_Deque();
    scanf("%d", &N);
    for(int i = 0; i < N; i++){
        check();
        // print_debug();
    }
    return 0;
}