ํฌ์ŠคํŠธ

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 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.