#include<stdio.h>
#include<string.h>
int queue[10001]={0,};
char command[6];
int queuenum = 0;
void callpush(int value);
void callpop();
void callsize();
void callempty();
void callfront();
void callback();
int main() {
int task, i, value;
char *push = "push", *pop = "pop", *size = "size", *empty = "empty", *front = "front", *back = "back";
scanf("%d", &task);
for(i=0;i<task;i++){
scanf("%s", command);
if(strcmp(command, push) == 0){
scanf("%d", &value);
callpush(value);
}
else if(strcmp(command, pop) == 0){
callpop();
}
else if(strcmp(command, size) == 0){
callsize();
}
else if(strcmp(command, empty) == 0){
callempty();
}
else if(strcmp(command, front) == 0){
callfront();
}
else if(strcmp(command, back) == 0){
callback();
}
}
}
void callpush(int value){
queue[queuenum] = value;
queuenum++;
}
void callpop(){
int i;
if(queue[0] == 0 && queuenum == 0)
printf("-1\n");
else{
printf("%d\n", queue[0]);
for(i=0;i<queuenum;i++){
queue[i] = queue[i+1];
}
queue[queuenum] = 0;
queuenum--;
}
}
void callsize(){
printf("%d\n", queuenum);
}
void callempty(){
if(queuenum==0&&queue[queuenum]==0)
printf("1\n");
else
printf("0\n");
}
void callfront(){
if(queuenum==0&&queue[queuenum]==0)
printf("-1\n");
else
printf("%d\n", queue[0]);
}
void callback(){
if(queuenum==0&&queue[queuenum]==0)
printf("-1\n");
else
printf("%d\n", queue[queuenum-1]);
}
큐는 원통형의 모형의 저장 입니다.
배열의 0번쪽의 위치를 front라고 부르며 반대편을 back 이라고 합니다.
선입 선출 First in First out 방식으로 값이 들어오면 back 으로 들어가서 front방향으로 나갑니다.
#include<stdio.h>
#include<string.h>
int queue[10001]={0,};
char command[6];
int queuenum = 0;
void callpush(int value);
void callpop();
void callsize();
void callempty();
void callfront();
void callback();
먼저 필요한 헤더와 전역 변수들을 선언합니다. 또한 값을 처리해줄 함수들을 선언합니다.
int main() {
int task, i, value;
char *push = "push", *pop = "pop", *size = "size", *empty = "empty", *front = "front", *back = "back";
scanf("%d", &task);
for(i=0;i<task;i++){
scanf("%s", command);
if(strcmp(command, push) == 0){
scanf("%d", &value);
callpush(value);
}
else if(strcmp(command, pop) == 0){
callpop();
}
else if(strcmp(command, size) == 0){
callsize();
}
else if(strcmp(command, empty) == 0){
callempty();
}
else if(strcmp(command, front) == 0){
callfront();
}
else if(strcmp(command, back) == 0){
callback();
}
}
}
메인 함수를 입니다.
task로 명령 받을 개수를 받습니다. value 의 경우는 push 명령에서 입력하는 숫자도 추가로 넣기 때문에 추가했습니다.
char의 경우 입력된 command와 비교해서 <string.h>에 있는 문자 비교 strcmp를 사용해 동일한 입력이라면 해당 명령을 수행하도록 했습니다. strcmp함수의 경우 두개의 값이 동일한 경우 0을 반환합니다.
void callpush(int value){
queue[queuenum] = value;
queuenum++;
}
void callpop(){
int i;
if(queue[0] == 0 && queuenum == 0)
printf("-1\n");
else{
printf("%d\n", queue[0]);
for(i=0;i<queuenum;i++){
queue[i] = queue[i+1];
}
queue[queuenum] = 0;
queuenum--;
}
}
void callsize(){
printf("%d\n", queuenum);
}
void callempty(){
if(queuenum==0&&queue[queuenum]==0)
printf("1\n");
else
printf("0\n");
}
void callfront(){
if(queuenum==0&&queue[queuenum]==0)
printf("-1\n");
else
printf("%d\n", queue[0]);
}
void callback(){
if(queuenum==0&&queue[queuenum]==0)
printf("-1\n");
else
printf("%d\n", queue[queuenum-1]);
}
callpush 는 먼저 현재 위치에 value 값을 받아서 넣습니다. 이후 queuenum 값을 증가 시켜줍니다.
callpop은 배열의 맨앞 front에 위치한 0번 위치의 값을 출력하고 제거합니다. 만약 0번의 값이 0이라면 비어 있는 큐 이므로 -1을 출력합니다. 만약 값이 존재해서 출력되었다면 뒤의 배열을을 모두 앞으로 한칸씩 옮겨옵니다. 이후에 queuenum을 하나 감소시킵니다.
callsize 는 현재 배열의 크기를 확인합니다. 크기는 1부터 시작하고 배열은 0번부터 시작하므로 queuenum의 번호가 현재 배열의 크기가 됩니다.
callempty 는 배열이 비어있는지 아닌지를 확인하여 값을 출력 합니다. 0번 배열의 값만 확인 해보고 값이 0이라면 1 아니라면 0을 출력 합니다.
callfront는 큐의 맨 앞의 값을 출력하고 callback은 큐의 맨 끝값을 출력합니다
스택(stack) 2021.11.27 - [백준 코드 공부/C언어] - 백준 10828 : 스택 (C언어)
덱(deque) 2021.11.27 - [백준 코드 공부/C언어] - 백준 10866 : 덱 (C언어)
Git Hub
BaekJoon-Study/10845:큐.c at C · GUuu9/BaekJoon-Study (github.com)
'백준 코드 공부 > C언어' 카테고리의 다른 글
백준 1453 : 피시방 알바 (C언어) (0) | 2021.12.04 |
---|---|
백준 10866 : 덱 (C언어) (0) | 2021.11.27 |
백준 10828 : 스택 (C언어) (0) | 2021.11.27 |
백준 10818 : 최소, 최대 (C언어) (0) | 2021.11.20 |
백준 1110 : 더하기 사이클 (C언어) (0) | 2021.11.20 |