woonadz :)

[백준/C언어] 큐_10845번_nabi 본문

IT/백준

[백준/C언어] 큐_10845번_nabi

C_scorch 2022. 3. 29. 22:22
반응형

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int front = 0, rear = 0; //front와 rear을 상수로 지정했다
int que[10000]; //명령어를 최대 10000개까지 입력가능하기 때문에
void push(int num);
void pop(int arr);

int main() {
	int n=0, tmp=0; //n은 반복 횟수, tmp는 push로 큐에 집어넣은 숫자
	char order[6]; //명령어가 최대 5글자이므로 6칸짜리 배열 선언

	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		scanf("%s", order);
		if (strcmp(order, "push") == 0) { //strcmp 함수를 통해 push와 입력받은 문제열이 같은지 확인
			scanf("%d", &tmp); //큐에 집어넣은 숫자 입력받기
			push(tmp);
		}
		else if (strcmp(order, "pop") == 0) { //strcmp 함수를 통해 pop와 입력받은 문제열이 같은지 확인
			int k;
			if (front == rear) //front와 rear 값이 같은 경우 큐가 비어있음
				printf("-1\n");
			else {
				front++;
				k = que[front];
				que[front] = 0;
				printf("%d\n", k);
			}
		}
		else if (strcmp(order, "size") == 0) { //strcmp 함수를 통해 size와 입력받은 문제열이 같은지 확인
			printf("%d\n", rear - front);
		}
		else if (strcmp(order, "empty") == 0) { //strcmp 함수를 통해 empty와 입력받은 문제열이 같은지 확인
			if (front == rear)
				printf("1\n");
			else
				printf("0\n");
		}
		else if (strcmp(order, "front") == 0) { //strcmp 함수를 통해 front와 입력받은 문제열이 같은지 확인
			if (front == rear)
				printf("-1\n");
			else
				printf("%d\n", que[front + 1]);
		}
		else if (strcmp(order, "back") == 0) { //strcmp 함수를 통해 back와 입력받은 문제열이 같은지 확인
			if (front == rear)
				printf("-1\n");
			else
				printf("%d\n", que[rear]);
		}
		else
			printf("해당 명령어는 입력되어있지 않습니다.\n");
	}

	return 0;
}
void push(int num) {
	rear++;
	que[rear] = num;
}

 

원형큐를 구현하고 싶었지만 선형큐로 구현했다.

원형큐로 구현할 경우 몇까지를 큐의 포화상태로 잡아야할지 모르겠기 때문이다. 최대 10000개까지 명령어를 입력할 수 있기 때문에 push 명령어로 10000개를 입력할 경우 포화상태가 된다. 

원형큐로 구현이 가능한가....?

 

원형큐에 대해선 조금 더 공부를 해야겠다. 

반응형