거북이의 IT 공부
[백준 10845] 큐 - C/C++ 본문
문제
https://www.acmicpc.net/problem/10845
나의 코드 - C언어
#define _CRT_SECURE_NO_WARNINGS #define MAX_QUEUE_SIZE 10000 #define Success 1 #define Error -1 #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct { int queue[MAX_QUEUE_SIZE]; int head; int tail; }QueueType; QueueType* created() { QueueType* q; q = (QueueType*)malloc(sizeof(QueueType)); q->head = 0; q->tail = 0; return q; } int is_empty(QueueType* q) { return (q->head == q->tail); } int is_full(QueueType* q) { return ((q->tail + 1) % MAX_QUEUE_SIZE == q->head); } int enqueue(QueueType* q, int item) { if (is_full(q)) return Error; q->tail = (q->tail + 1) % MAX_QUEUE_SIZE; q->queue[q->tail] = item; return Success; } int dequeue(QueueType* q) { if (is_empty(q)) return Error; q->head = (q->head + 1) % MAX_QUEUE_SIZE; return q->queue[q->head]; } int main() { char com[10]; int num, item; QueueType* q = created(); scanf("%d", &num); for (int i = 0; i < num; i++) { scanf("%s", com); fgetc(stdin); if (!strcmp(com, "push")) { scanf("%d", &item); fgetc(stdin); enqueue(q, item); } else if (!strcmp(com, "pop")) { printf("%d\n", dequeue(q)); } else if (!strcmp(com, "size")) { printf("%d\n", q->tail - q->head); } else if (!strcmp(com, "empty")) { printf("%d\n", is_empty(q)); } else if (!strcmp(com, "front")) { if (is_empty(q)) printf("%d\n", -1); else printf("%d\n", q->queue[q->head + 1]); } else if (!strcmp(com, "back")) { if (is_empty(q)) printf("%d\n", -1); else printf("%d\n", q->queue[q->tail]); } } return 0; }
참고로 아래의 코드는 오류가 난다.
왜냐하면 vector 사이즈를 늘려놓지 않고 무작정 값을 넣기 떄문!! 그래서 push_back를 사용한다.
vector<int> vec(5);처럼 크기를 정해놓지 않는 이상 push_back를 사용해야 한다.
나의코드 - C++
STL queue를 사용하여 쉽게 문제해결이 가능하다.
#include <iostream> #include <string> #include <queue> using namespace std; int main() { queue <int> q; int num; cin >> num; for (int i = 0; i < num; i++) { string com; cin >> com; if (com == "push") { int com_end; cin >> com_end; q.push(com_end); } else if (com == "pop") { if (q.empty()) cout << "-1" << '\n'; else { cout << q.front() << '\n'; q.pop(); } } else if (com == "size") { cout << q.size() << '\n'; } else if (com == "empty") { if (q.empty()) cout << "1" << '\n'; else cout << "0" << '\n'; } else if (com == "front") { if(q.empty()) cout << "-1" << '\n'; else cout << q.front() << '\n'; } else if (com == "back") { if (q.empty()) cout << "-1" << '\n'; else cout << q.back() << '\n'; } } }
'Baekjoon' 카테고리의 다른 글
[백준 9012] 괄호 - C++ / 알고리즘 '스택' (0) | 2020.04.09 |
---|---|
[백준 10866] 덱 - C++ (0) | 2020.04.09 |
RE. [백준 6198] 옥상 정원 꾸미기 - C++ / 알고리즘 monotone stack (0) | 2020.04.04 |
[백준 2493] 탑 - C++ / 알고리즘 '스택' (0) | 2020.04.03 |
[백준 10828] 스택 - C, C++ (0) | 2020.03.28 |
Comments