큐 는 순서가 있는 자료구조이다.
C++ STL 의 queue 를 사용하자.
각 연산은 O(1) 만에 연산되며, 구현 시 이렇게 되어야 한다.
queue 는 배열 혹은 linked list 로 구현 가능하다.
c++ 의 vector 나 python 의 list 로 queue 를 구현하면 안된다.
vector 의 pop 연산은 모든 배열의 값을 하나 밀기 때문에 pop 이 O(N) 이 걸리므로, 정의와 다르다.
Queue 구현 (강의)
#include <iostream>
#include <string>
using namespace std;
struct Queue {
int data[10000];
int begin, end;
Queue() {
begin = 0;
end = 0;
}
void push(int num) {
data[end] = num;
end += 1;
}
bool empty() {
if (begin == end) {
return true;
} else {
return false;
}
}
int size() {
return end - begin;
}
int front() {
return data[begin];
}
int back() {
return data[end-1];
}
int pop() {
if (empty()) {
return -1;
}
begin += 1;
return data[begin-1];
}
};
int main() {
int n;
cin >> n;
Queue q;
while (n--) {
string cmd;
cin >> cmd;
if (cmd == "push") {
int num;
cin >> num;
q.push(num);
} else if (cmd == "pop") {
if (q.empty()) {
cout << -1 << '\n';
} else {
cout << q.front() << '\n';
q.pop();
}
} else if (cmd == "size") {
cout << q.size() << '\n';
} else if (cmd == "empty") {
cout << q.empty() << '\n';
} else if (cmd == "front") {
if (q.empty()) {
cout << -1 << '\n';
} else {
cout << q.front() << '\n';
}
} else if (cmd == "back") {
if (q.empty()) {
cout << -1 << '\n';
} else {
cout << q.back() << '\n';
}
}
}
return 0;
}
덱(Double-ended queue)
덱은 BFS 에서 많이 쓴다.
C++ STL 에 구현되어 있다. deque
덱은 스택과 큐, 둘 다로 사용 가능하다.
반응형
'알고리즘 & 코딩 테스트 > code.plus' 카테고리의 다른 글
[기초] 그래프의 탐색 (0) | 2021.10.02 |
---|---|
[기초] 그래프 (0) | 2021.09.25 |
[기초] 1차원 다이나믹 / 연속과 관련된 다이나믹 (0) | 2021.09.24 |
[기초] 다이나믹 프로그래밍 (0) | 2021.09.22 |
[기초] 브루트 포스 - 비트마스크 (0) | 2021.09.21 |