https://www.acmicpc.net/problem/10845
큐를 구현하는 문제.
구현해야 하는 사항은 다음과 같다.
- push X: 정수 X를 큐에 넣는 연산이다.
- pop: 큐에서 가장 앞에 있는 정수를 빼고, 그 수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- size: 큐에 들어있는 정수의 개수를 출력한다.
- empty: 큐가 비어있으면 1, 아니면 0을 출력한다.
- front: 큐의 가장 앞에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
- back: 큐의 가장 뒤에 있는 정수를 출력한다. 만약 큐에 들어있는 정수가 없는 경우에는 -1을 출력한다.
중간에 함수에서 return해주는걸 까먹고 return을 안써놓고 왜 틀렸지 하면서 고민했다.
#include <stdio.h>
#include <string.h>
typedef struct {
int queue[10000];
int len;
}Queue;
void push(Queue * q, int x) {
q->queue[q->len++] = x;
}
int pop(Queue * q) {
if (q->len) {
int result = q->queue[0];
for (int i = 0; i < q->len-1; i++) {
q->queue[i] = q->queue[i + 1]; // 한칸씩 앞으로 당긴다.
}
q->len--;
return result;
} else return -1;
}
int size (Queue * q) {
return q->len;
}
int empty (Queue * q) {
return q->len == 0;
}
int front(Queue * q) {
if (q->len) return q->queue[0];
else return -1;
}
int back (Queue * q) {
if (q->len) return q->queue[q->len-1];
else return -1;
}
int main () {
Queue q = {{0}, 0};
int t, x;
char func[11];
scanf("%d", &t);
while (t--) {
scanf("%s", func);
if (strcmp(func, "push") == 0) {
scanf(" %d", &x);
printf("%d", x);
push(&q, x);
} else if(strcmp(func, "pop") == 0) {
printf("%d\n", pop(&q));
} else if(strcmp(func, "size") == 0) {
printf("%d\n", size(&q));
} else if(strcmp(func, "empty") == 0) {
printf("%d\n", empty(&q));
} else if(strcmp(func, "front") == 0) {
printf("%d\n", front(&q));
} else if(strcmp(func, "back") == 0) {
printf("%d\n", back(&q));
}
}
return 0;
}
'coding_test > BAEKJOON' 카테고리의 다른 글
백준 10773번 C++풀이 (0) | 2021.11.18 |
---|---|
백준 1009번 C언어 풀이 (0) | 2021.11.11 |
백준 10989번 C언어 풀이 (0) | 2021.11.05 |
백준 10828번 C언어 풀이 (0) | 2021.11.04 |
백준 1011번 C언어 풀이 (0) | 2021.11.01 |