-
[baekjoon]C언어 10845번 (큐)알고리즘 & 자료구조/코딩테스트 2021. 1. 27. 19:01
문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
예제 입력 1 복사
15
push
1
push
2
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front
예제 출력 1 복사
1
2
2
0
1
2
-1
0
1
-1
0
3
//1차원 배열을 이용한 큐 구현 #include <stdio.h> #include <string.h> #define MAX_SIZE 10001 #define TRUE 1 #define FALSE 0 typedef int Element; typedef struct _queue { Element arr[MAX_SIZE]; int front; //앞쪽 int rear; //끝쪽 int size; } Queue; void init(Queue *q) { q->front = q->rear = -1; q->size = 0; } int isEmpty(Queue *q) { if(q->front == q->rear){ return TRUE; } return FALSE; } int isFull(Queue *q) { if(q->rear + 1 == MAX_SIZE) { return TRUE; } return FALSE; } void enQueue(Queue *q, Element data) { if(isFull(q) == TRUE) {return;} q->rear = (q->rear + 1); q->arr[q->rear] = data; q -> size++; } int deQueue(Queue *q) { if(isEmpty(q) == TRUE) { return -1; } q->front = (q->front +1); //앞쪽에 있는 항목 삭제되면 front 위치도 이동 시켜준다. q->size--; return q->arr[q->front]; } int size_print(Queue *q) { return q->size; } int front(Queue *q) { if(isEmpty(q) == TRUE) {return -1;} return q->arr[(q->front)+1]; } int back(Queue *q) { if(isEmpty(q) == TRUE) {return -1;} return q->arr[q->rear]; } int main(void) { char str[6]; Queue q; int n, num; scanf("%d", &n); init(&q); for(int i =0; i < n; i++) { scanf("%s", str); if(!strcmp(str, "push")) { scanf("%d", &num); enQueue(&q, num); } else if(!strcmp(str, "pop")) { printf("%d\n", deQueue(&q)); } else if(!strcmp(str, "size")) { printf("%d\n", size_print(&q)); } else if(!strcmp(str, "empty")) { printf("%d\n", isEmpty(&q)); } else if(!strcmp(str, "front")) { printf("%d\n", front(&q)); } else if(!strcmp(str, "back")) { printf("%d\n", back(&q)); } } } //개행문자 때문에 에러 발생했었음,,
728x90반응형'알고리즘 & 자료구조 > 코딩테스트' 카테고리의 다른 글
[baekjoon]2839번 설탕 배달 c++ (0) 2021.01.29 [baekjoon]C언어 1991번 (트리 순회) (0) 2021.01.28 [baekjoon] 10828번 스택 (스택) (0) 2021.01.26 [프로그래머스] 완주하지 못한 선수 (0) 2021.01.25 [baekjoon] 10872번 팩토리얼 (재귀) (0) 2021.01.25