-
[C++] νμ κ°λ κ³Ό STL Queue μ¬μ©λ²Algorithm & Data Structure 2022. 1. 17. 22:31λ°μν
λ€μ΄κ°λ©°
νλ λ¨Όμ λ€μ΄κ° μμκ° λ¨Όμ λμ€κ² λλ ꡬ쑰μ¬μ FIFO(First In First Out) μλ£κ΅¬μ‘°λΌκ³ λΆλ₯Έλ€. κ·Έλ¦¬κ³ C++ STLμ νκ° κ΅¬νλμ΄ μμ΄ μ½κ² μ΄μ©ν μ μλ€! νλ BFS, Flood Fill μκ³ λ¦¬μ¦μ λ³΄ν΅ μ¬μ©νλ€.
ν(Queue) λ?
ν(queue)λ μ»΄ν¨ν°μ κΈ°λ³Έμ μΈ μλ£ κ΅¬μ‘°μ νκ°μ§λ‘, λ¨Όμ μ§μ΄ λ£μ λ°μ΄ν°κ° λ¨Όμ λμ€λ FIFO(First In First Out)κ΅¬μ‘°λ‘ μ μ₯νλ νμμ λ§νλ€. μμ΄ λ¨μ΄ queueλ νλ₯Ό μ¬λ¬ μΌλ ¬λ‘ λμ΄μ μ¬λλ€λ‘ μ΄λ£¨μ΄μ§ μ€μ λ§νκΈ°λ νλ©°, λ¨Όμ μ€μ μ μ¬λμ΄ λ¨Όμ λκ° μ μλ μν©μ μ°μνλ©΄ λλ€.
λμ€μ μ§μ΄ λ£μ λ°μ΄ν°κ° λ¨Όμ λμ€λ μ€νκ³Όλ λ°λλλ κ°λ μ΄λ€.
νλ¦°ν°μ μΆλ ₯ μ²λ¦¬λ μλ μμ€ν μ λ©μμ§ μ²λ¦¬κΈ°, νλ‘μΈμ€ κ΄λ¦¬ λ± λ°μ΄ν°κ° μ λ ₯λ μκ° μμλλ‘ μ²λ¦¬ν΄μΌ ν νμκ° μλ μν©μ μ΄μ©λλ€.
- μν€λ°±κ³Όν
νμ λν΄μ μλμ μ¬μ§μ λ³΄κ³ μ΄ν΄ν΄λ³΄μ.
μ μ¬μ§μ 보면 μμ 32λ₯Ό λ£μ΄μ ν μμ μμκ° 5, 17, 32κ° λ€μ΄μκ² λμλ€. μ¬κΈ°μ μμλ₯Ό μ κ±°νλ©΄ κ°μ₯ λ¨Όμ λ€μ΄μμλ μμμΈ 5κ° λΉ μ Έλκ°λ€. μ΄λ¬ν ꡬ쑰λ₯Ό νλΌκ³ λΆλ₯Έλ€.
νμ μ±μ§
- μμλ₯Ό μΆκ°νκ±°λ μμλ₯Ό μ κ±°νκΈ° μν΄ O(1)μ μκ° λ³΅μ‘λκ° νμνλ€.
- μ μΌ μλ¨μ μμμ μ μΌ νλ¨μ μμλ₯Ό νμΈνκΈ° μν΄ O(1)μ μκ° λ³΅μ‘λκ° νμνλ€.
- μ μΌ μλ¨μ μλ μμμ μ μΌ νλ¨μ μλ μμλ₯Ό μ μΈν λλ¨Έμ§ μμλ€μ νμΈνκ±°λ λ³κ²½νλ κ²μ μμΉμ μΌλ‘ λΆκ°λ₯νλ€. (λ°°μ΄μ μ΄μ©ν΄ νλ₯Ό ꡬννλ©΄ νμΈνκ±°λ λ³κ²½κ°λ₯νλλ‘ λ§λ€ μ μλ€.)
STL Queue
μλλ queue ν€λ νμΌμ μ μΈμ΄λ€.
#include <queue> ...
Queue μ μΈ
#include <iostream> #include <queue> using namespace std; int main(void) { queue<int> Q; // λΉμ΄μλ int queue μ μΈ return 0; }
Queue κ° μΆκ°
queueμ κ°μ μΆκ°νκΈ° μν΄μλ push() ν¨μλ₯Ό μ¬μ©νλ€.
#include <iostream> #include <queue> using namespace std; int main(void) { queue<int> Q; // λΉμ΄μλ int queue μ μΈ Q.push(1); // 1 Q.push(2); // 1 2 Q.push(3); // 1 2 3 return 0; }
Queue ν¬κΈ°
queueμ ν¬κΈ°λ₯Ό ꡬνκΈ° μν΄μλ size() ν¨μλ₯Ό μ¬μ©νλ€. κ·Έλ¦¬κ³ queueκ° λΉμ΄μλμ§ νμΈνκΈ° μν΄ empty() ν¨μλ₯Ό μ¬μ©νλ€.
#include <iostream> #include <queue> using namespace std; int main(void) { queue<int> Q; // λΉμ΄μλ int queue μ μΈ Q.push(1); // 1 Q.push(2); // 1 2 Q.push(3); // 1 2 3 cout << Q.size() << '\n'; // 3 if (!Q.empty()) { cout << "queue is not empty!" << '\n'; } return 0; }
Queue κ° μμ
queueμ κ°μ μμ νκΈ° μν΄μ pop() ν¨μλ₯Ό μ¬μ©νλ€. κ·Έλ¦¬κ³ νκ° λΉμ΄μλ λ° pop() ν¨μλ₯Ό νΈμΆνλ©΄ λ°νμ μλ¬κ° λ°μνλ€!
#include <iostream> #include <queue> using namespace std; int main(void) { queue<int> Q; // λΉμ΄μλ int queue μ μΈ Q.push(1); // 1 Q.push(2); // 1 2 Q.push(3); // 1 2 3 cout << Q.size() << '\n'; // 3 if (!Q.empty()) { cout << "queue is not empty!" << '\n'; } Q.pop(); // 2 3 return 0; }
Queue κ° νμΈ
STL Queueμμλ μ μΌ μλ¨μ μμμ μ μΌ νλ¨μ μμ μ΄μΈμ μμμ κ°μ νμΈνκ±°λ λ³κ²½ν μ μλ€. νμ μ μΌ μλ¨ μμμ κ°μ νμΈνκΈ° μν΄ front() ν¨μλ₯Ό μ¬μ©νκ³ , νμ μ μΌ νλ¨ μμμ κ°μ νμΈνκΈ° μν΄ back() ν¨μλ₯Ό μ¬μ©νλ€. κ·Έλ¦¬κ³ νκ° λΉμ΄μλ λ° front() ν¨μλ back() ν¨μλ₯Ό νΈμΆνλ©΄ λ°νμ μλ¬κ° λ°μνλ€!
#include <iostream> #include <queue> using namespace std; int main(void) { queue<int> Q; // λΉμ΄μλ int queue μ μΈ Q.push(1); // 1 Q.push(2); // 1 2 Q.push(3); // 1 2 3 cout << Q.size() << '\n'; // 3 if (!Q.empty()) { cout << "queue is not empty!" << '\n'; } Q.pop(); // 2 3 cout << Q.front() << '\n'; // 2 cout << Q.back() << '\n'; // 3 return 0; }
λ°μν