코딩테스트/문제 풀이
[백준/C언어] 큐_10845번_nabi
Crain
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개를 입력할 경우 포화상태가 된다.
원형큐로 구현이 가능한가....?
원형큐에 대해선 조금 더 공부를 해야겠다.
반응형