coding_test/BAEKJOON
백준 10845번 C언어 풀이
CodeJin
2021. 11. 11. 05:17
https://www.acmicpc.net/problem/10845
10845번: 큐
첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지
www.acmicpc.net
큐를 구현하는 문제.
구현해야 하는 사항은 다음과 같다.
- 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;
}