Deque
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 ๋ผ์ด์ผ์ค๋ฅผ ๋ฐ๋ฆ
๋๋ค.