728x90
https://www.acmicpc.net/problem/18258
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
# define FAIL 99999999
typedef struct _Node {
int data;
struct _Node* next;
} Node;
typedef struct _Queue {
Node* front;
Node* rear;
int size;
} Queue;
void initialize(Queue* q) {
q->front = q->rear = NULL;
q->size = 0;
};
int isEmpty(Queue* q) {
return (q->size == 0);
};
void enQ(int data, Queue* q) {
// Create a node
//Node* new_node;
Node* new_node = malloc(sizeof(Node));
new_node->data = data;
new_node->next = NULL;
// link
if (isEmpty(q)) {
q->front = new_node;
q->rear = new_node;
}
else {
q->rear->next = new_node;
q->rear = q->rear->next;
}
q->size++;
};
int deQ(Queue* q) {
int ret = FAIL;
if (!isEmpty(q)) {
ret = q->front->data;
q->front = q->front->next;
q->size--;
}
return ret;
};
int main()
{
int N, i, num, tmp;
char input[6];
Queue q;
initialize(&q);
scanf("%d", &N);
for (i = 0; i < N; i++)
{
scanf("%s", input);
if (input[0] == 'p') {
if (input[1] == 'u') { // push
scanf("%d", &num);
enQ(num, &q);
}
else { // pop
tmp = deQ(&q);
if (tmp == FAIL) {
printf("-1\n");
} else {
printf("%d\n", tmp);
}
}
} else if (input[0] == 's') { // size
printf("%d\n", q.size);
} else if (input[0] == 'e') {
printf("%d\n", isEmpty(&q));
} else if (input[0] == 'f') {
if (q.size) {
printf("%d\n", q.front->data);
} else {
printf("-1\n");
}
} else if (input[0] == 'b') {
if (q.size) {
printf("%d\n", q.rear->data);
}
else {
printf("-1\n");
}
}
}
return 0;
}
오랜만에 C 로 풀었다.
linked list, queue를 다시 상기시키기 위해 시작했는데 포인터나 string 관련 때문에 꽤 오래걸렸다.
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 10830 행렬제곱 C++ (0) | 2021.12.10 |
---|---|
[백준] 1966 프린터 큐 C (0) | 2021.11.29 |
[백준] 1987 알파벳 python(pypy), c (0) | 2021.10.26 |
[백준] 14499 주사위 굴리기 python (0) | 2021.10.17 |
[백준] 9205 맥주 마시면서 걸어가기 (0) | 2021.10.14 |