π Deque
π« @TODO
Double Ended Queue
μμͺ½ λμμ μ½μ μμ κ° μ λΆ κ°λ₯
Restricted Structure
νΉμ μμΉμμλ§ μμλ₯Ό λ£κ±°λ λΊ μ μλ μ νλ μλ£κ΅¬μ‘° (μ€ν, ν, λ±)
- μ±μ§
- μμ μΆκ° O(1)
- μμ μ κ±° O(1)
- μ μΌ μ/λ€ μμ νμΈ O(1)
- μ μΌ μ/λ€κ° μλ λλ¨Έμ§ μμλ€μ νμΈ/λ³κ²½μ΄ βμμΉμ μΌλ‘β λΆκ°λ₯
- λ νΉνκ²λ STL dequeμμλ μΈλ±μ€λ‘ μμμ μ κ·Όν μ μμ
λ§μ°¬κ°μ§λ‘ μ°κ²°λ¦¬μ€νΈλ³΄λ€ λ°°μ΄ κ΅¬νμ΄ λ μ¬μ
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
const int MAX = 1000005;
int dat[2 * MAX + 1];
int head = MAX, tail = MAX;
void push_front(int x)
{
dat[--head] = x;
}
void push_back(int x)
{
dat[tail++] = x;
}
void pop_front()
{
head++;
}
void pop_back()
{
tail--;
}
int front()
{
return dat[head];
}
int back()
{
return dat[tail-1];
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <bits/stdc++.h>
using namespace std;
int main(void)
{
// STL dequeλ deque보λ€λ vectorλ λΉμ·νλ°
// vectorκ° frontμμλ O(1)λ‘ μΆκ° μ κ±°κ° κ°λ₯ν λλ
// insert erase μΈλ±μ€μ κ·Ό
// stl vectorμμ μ 곡λλ κΈ°λ₯μ stl dequeμμλ λ€ μ 곡
// λ¨, vectorμ λ¬λ¦¬ dequeλ λͺ¨λ μμλ€μ΄ λ©λͺ¨λ¦¬μμ μ°μνκ² λ°°μΉλμ΄ μμ§ μμ
// κΆκΈνλ€λ©΄ cpp deque vs vector
deque<int> DQ;
DQ.push_front(10); // 10
DQ.push_back(50); // 10 50
DQ.push_front(24); // 24 10 50
for(auto x : DQ) cout << x << ' ';
cout << DQ.size() << '\n'; // 3
if(DQ.empty()) cout << "DQ is empty\n";
else cout << "DQ is not empty\n"; // DQ is not empty
DQ.pop_front(); // 10 50
DQ.pop_back(); // 10
cout << DQ.back() << '\n'; // 10
DQ.push_back(72); // 10 72
cout << DQ.front() << '\n'; // 10
DQ.push_back(12); // 10 72 12
DQ[2] = 17; // 10 72 17
DQ.insert(DQ.begin()+1, 33); // 10 33 72 17
DQ.insert(DQ.begin()+4, 60); // 10 33 72 17 60
for(auto x : DQ) cout << x << ' ';
cout << '\n';
DQ.erase(DQ.begin()+3); // 10 33 72 60
cout << DQ[3] << '\n'; // 60
DQ.clear(); // DQμ λͺ¨λ μμ μ κ±°
}
BFS
Flood Fill
λ λ€ λ¨κ³¨ λ¬Έμ
- μ΄μ체μ μμ μ€μΌμ€λ§ μκ³ λ¦¬λ¬
- μ±μ undo 리μ€νΈ
π«§
μ΄ κΈ°μ¬λ μ μκΆμμ CC BY 4.0 λΌμ΄μΌμ€λ₯Ό λ°λ¦
λλ€.