본문 바로가기
백준/C

백준 10845번 : 큐 [C]

by 대니스 2022. 8. 18.

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

 

10845번: 큐

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

www.acmicpc.net

소스 코드 :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_QUEUE_SIZE 10000

typedef int element;
typedef struct {
	element data[MAX_QUEUE_SIZE];
	int rear;
	int front;
}QueueType;

void init_queue(QueueType* q)
{
	q->front = -1;
	q->rear = -1;
}

int is_empty(QueueType* q)
{
	if (q->front == q->rear)
		return 1;
	else return 0;
}

int is_full(QueueType* q)
{
	if (q->rear == MAX_QUEUE_SIZE - 1)
		return 1;
	else return 0;
}

void enqueue(QueueType* q, element item)
{
	if (is_full(q))
		return;
	q->data[++(q->rear)] = item;
}

int dequeue(QueueType* q)
{
	if (is_empty(q))
		return -1;
	int item = q->data[++(q->front)];
	return item;
}

int main()
{
	int num, n = 0;
	char message[20];
	QueueType q;
	init_queue(&q);
	scanf("%d", &num);
	for (int i = 1; i <= num; i++)
	{
		scanf("%s", &message);
		if (strcmp(message, "push") == 0)
		{
			scanf("%d", &n);
			enqueue(&q, n);
		}
		else if (strcmp(message, "pop") == 0)
			printf("%d\n", dequeue(&q));

		else if (strcmp(message, "size") == 0)
			printf("%d\n", q.rear-q.front);

		else if (strcmp(message, "empty") == 0)
			printf("%d\n", is_empty(&q));

		else if (strcmp(message, "front") == 0)
			if (is_empty(&q))
				printf("-1\n");
			else printf("%d\n", q.data[q.front + 1]);

		else if (strcmp(message, "back") == 0)
			if (is_empty(&q))
				printf("-1\n");
			else printf("%d\n", q.data[q.rear]);
	}
	return 0;
}

마무리 : 스택 문제와 같이 특정 입력을 한다면 그것에 맞게 행한다. C는 큐를 직접 만들어야하기 때문에 위와 같이 작성을 해야한다.

'백준 > C' 카테고리의 다른 글

백준 10828번 : 스택 [C]  (0) 2022.08.17
백준 10773번 : 제로 [C]  (0) 2022.08.17
백준 2164번 : 카드2 [C]  (0) 2022.08.11
백준 1259번 : 팰린드롬수 [C]  (0) 2022.08.04
백준 15829번 : Hashing [C]  (0) 2022.08.03