포슀트

πŸŒ“ 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 λΌμ΄μ„ΌμŠ€λ₯Ό λ”°λ¦…λ‹ˆλ‹€.