coding_test/BAEKJOON

백준 10845번 C언어 풀이

CodeJin 2021. 11. 11. 05:17

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

 

10845번: 큐

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

www.acmicpc.net

큐를 구현하는 문제.

 

구현해야 하는 사항은 다음과 같다.

 

  • push X: 정수 X를 큐에 넣는 연산이다.
  • pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • size: 큐에 들어있는 정수의 개수를 출력한다.
  • empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
  • front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
  • back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.

중간에 함수에서 return해주는걸 까먹고 return을 안써놓고 왜 틀렸지 하면서 고민했다.

#include <stdio.h>
#include <string.h>

typedef struct {
    int queue[10000];
    int len;
}Queue;

void push(Queue * q, int x) {
    q->queue[q->len++] = x;
}

int pop(Queue * q) {
    if (q->len) {
        int result = q->queue[0];
        for (int i = 0; i < q->len-1; i++) {
            q->queue[i] = q->queue[i + 1]; // 한칸씩 앞으로 당긴다.
        }
        q->len--;
        return result;
    } else return -1;
}

int size (Queue * q) {
    return q->len;
}

int empty (Queue * q) {
    return q->len == 0;
}

int front(Queue * q) {
    if (q->len) return q->queue[0];
    else return -1;
}

int back (Queue * q) {
    if (q->len) return q->queue[q->len-1];
    else return -1;
}

int main () {
    Queue q = {{0}, 0};
    int t, x;
    char func[11];
    scanf("%d", &t);
    while (t--) {
        scanf("%s", func);
        if (strcmp(func, "push") == 0) {
            scanf(" %d", &x);
            printf("%d", x);
            push(&q, x);
        } else if(strcmp(func, "pop") == 0) {
            printf("%d\n", pop(&q));
        } else if(strcmp(func, "size") == 0) {
            printf("%d\n", size(&q));
        } else if(strcmp(func, "empty") == 0) {
            printf("%d\n", empty(&q));
        } else if(strcmp(func, "front") == 0) {
            printf("%d\n", front(&q));
        } else if(strcmp(func, "back") == 0) {
            printf("%d\n", back(&q));
        }
    } 
    return 0;
}