-
BOJ #10845 큐BOJ 2021. 1. 18. 21:03
문제
정수를 저장하는 큐를 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.
명령은 총 여섯 가지이다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
입력
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 않은 명령이 주어지는 경우는 없다.
출력
출력해야하는 명령이 주어질 때마다, 한 줄에 하나씩 출력한다.
소스코드(C언어)
#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> typedef struct { int value; struct NODE* next; }NODE; typedef struct { int size; struct NODE* first; struct NODE* last; }QUEUE; void push(QUEUE* queue, int num); int pop(QUEUE* queue); int size(QUEUE* queue); int empty(QUEUE* queue); int front(QUEUE* queue); int back(QUEUE* queue); int main() { int N; scanf("%d", &N); QUEUE* queue; queue = (QUEUE*)malloc(sizeof(QUEUE)); queue->size = 0; queue->first = NULL; queue->last = NULL; char str[10]; int num; for (int i = 0; i < N; i++) { scanf("%s", str); if (!strcmp(str, "push")) { scanf("%d", &num); push(queue, num); } else if (!strcmp(str, "pop")) printf("%d\n", pop(queue)); else if (!strcmp(str, "size")) printf("%d\n", size(queue)); else if (!strcmp(str, "empty")) printf("%d\n", empty(queue)); else if(!strcmp(str, "front")) printf("%d\n", front(queue)); else printf("%d\n", back(queue)); } for (int i = 0; i < queue->size; i++) { pop(queue); } free(queue); return 0; } void push(QUEUE* queue, int num) { NODE *node, *tmp; node = (NODE*)malloc(sizeof(NODE)); node->value = num; tmp = queue->last; if (queue->size == 0) queue->first = node; else tmp->next = node; queue->size++; queue->last = node; } int pop(QUEUE* queue) { NODE* tmp = queue->first; if (queue->size == 0) return -1; int num = tmp->value; queue->first = tmp->next; queue->size--; free(tmp); return num; } int size(QUEUE* queue) { return queue->size; } int empty(QUEUE* queue) { //비어있으면 1, 아니면 0 출력 if (queue->size == 0) return 1; else return 0; } int front(QUEUE* queue) { NODE* tmp = queue->first; if (queue->size == 0) return -1; int num = tmp->value; return num; } int back(QUEUE* queue) { NODE* tmp = queue->last; if (queue->size == 0) return -1; int num = tmp->value; return num; }
Idea
큐는 First In First Out이다.
'BOJ' 카테고리의 다른 글
BOJ #1725 히스토그램 (0) 2021.01.19 BOJ #2164 카드2 (0) 2021.01.18 BOJ #16120 PPAP (0) 2021.01.18 BOJ #10799 쇠막대기 (0) 2021.01.17 BOJ #1935 후위 표기식2 (0) 2021.01.17