๐ป์ด์ง ํธ๋ฆฌ(Binary Tree)
๋จผ์ ํ์ ๋ํด ์์๋ณด๊ธฐ์ ์ ์ด์งํธ๋ฆฌ์ ๋ํด์ ๊ฐ๋จํ ์์๋ณด๋๋ก ํ๊ฒ ๋ค. ์๋ํ๋ฉด ํ์ด ์ด์ง ํธ๋ฆฌ๋ก ๊ตฌํ๋๋ ์๋ฃ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
์ด์ง ํธ๋ฆฌ๋ ํ ๋ ธ๋๊ฐ ์ต๋ ๋๊ฐ์ ๋ ธ๋๋ฅผ ์์์ผ๋ก ๊ฐ์ง ์ ์๋ ํธ๋ฆฌ์ด๋ค. ๊ทธ ์ค์์๋, ๋ง์ง๋ง ๋ ๋ฒจ์ ์ ์ธํ ๋ชจ๋ ๋ ๋ฒจ์๋ ๋ ธ๋๋ค์ด ๊ฐ๋์ฐจ์๊ณ , ๋ง์ง๋ง ๋ ๋ฒจ์ ๋ ธ๋๋ค๋ ์ข์ธก๋ถํฐ ์์๋ก ๋ค์ด๊ฐ์๋ ํํ์ ์ด์ง ํธ๋ฆฌ๋ฅผ ์์ ์ด์ง ํธ๋ฆฌ ๋ผ๊ณ ํ๋ค.
์ด ์์ ์ด์งํธ๋ฆฌ๋ ์ด๋ฌํ ๊ตฌ์กฐ์ ํน์ง๋๋ฌธ์ ๋ ธ๋์ ๊ฐ์๋ฅผ ์๋ฉด ํธ๋ฆฌ์ ๊ตฌ์กฐ๋ฅผ ํน์ ํ ์ ์๋ค๋ ์ฑ์ง์ด ์๋ค. ๋ ์ด๋ฌํ ์ฑ์ง ๋๋ฌธ์ ์๋์ ๊ฐ์ ์ฑ์ง์ ๊ฐ์ง๊ณ ์๋ค.
ํ์ฌ ๋
ธ๋ ๋ฒํธ๋ฅผ i๋ผ ํ ๋,
โพ ํ์ฌ ๋
ธ๋์ perent node์ ๋ฒํธ = (i - 1) / 2
โพ ํ์ฌ ๋
ธ๋์ left child node์ ๋ฒํธ = i * 2 + 1
โพ ํ์ฌ ๋
ธ๋์ right child node์ ๋ฒํธ = i * 2 + 2
(Root node๊ฐ 0๋ฒ์ผ ๊ฒฝ์ฐ ๊ธฐ์ค)
์์ ๊ฐ์ ์ฑ์ง์ ๊ฐ์ง๊ณ ์๋ค. ์ด๋ฌํ ์ฑ์ง์ด ์๊ธฐ์ 1์ฐจ์ ๋ฐฐ์ด๋ก ์ด์ง ํธ๋ฆฌ๋ฅผ ๋ํ๋ด๊ธฐ ์ฉ์ดํ๋ค. ํ์ฌ ์ด์งํธ๋ฆฌ์ ๋ํ ๊ธ์ด ์๋๋ ์ด์ ๋๋ง ์์๋ณด๊ณ ํ์ผ๋ก ๋์ด๊ฐ๋ณด๋๋กํ์.
๐ปํ(Heap)
ํ์ ์์์ ์ค๋ช ํ ์์ ์ด์ง ํธ๋ฆฌ๋ก ๊ตฌํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์๋จ์ด ํ(heap)์ '๋ฌด์์ธ๊ฐ๋ฅผ ์ฐจ๊ณก์ฐจ๊ณก ์์์ฌ๋ฆฐ ๋๋ฏธ'๋ผ๋ ๋ป์ ์ง๋๊ณ ์๋ค. ๋ถ๋ชจ ๋ ธ๋๊ฐ ๊ฐ์ง ๊ฐ์ ์์ ๋ ธ๋์ ๊ฐ๋ณด๋ค ๋ฌด์กฐ๊ฑด ํฌ๊ฑฐ๋(Max Heap) ์์์ผ(Min Heap) ํ๋ค. ๋ํ ์์ ์ด์ง ํธ๋ฆฌ์ด๋ฏ๋ก ์์์ ์ค๋ช ํ ๊ตฌ์กฐ์ ํน์ง์ผ๋ก ๋ฐฐ์ด์ ํตํด ๊ตฌํ๊ฐ๋ฅ ํ๋ค.
๋ถ๋ชจ ๋ ธ๋์ ๊ฐ์ด ๋ฌด์กฐ๊ฑด ์์ ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฐ ํ์ Max Heap, ์์ ํ์ Min Heap์ด๋ผ๊ณ ํ๋๋ฐ, ์ค๋ช ์ ํธ์๋ฅผ ์ํด MaxHeap์ ๊ธฐ์ค์ผ๋ก ์ค๋ช ํด๋ณด๋๋ก ํ๊ฒ ๋ค.
์์ ๊ทธ๋ฆผ์ด MaxHeap์ ๋ชจ์ต์ด๋ค. ๋ณด๋ฉด ์๊ฒ ์ง๋ง ๋ค์ด๊ฐ์๋ ๋ฐ์ดํฐ์ค Root์ ๊ฐ์ด ๊ฐ์ฅ ํฌ๋ค. ๋ํ ๋ชจ๋ ์๋ธํธ๋ฆฌ์ ๋ํด์๋ ๊ฐ๋ค. ์ด๋ฌํ ์ฑ์ง์ ์ด์ฉํด์, ๊ฐ์ฅ ํฌ๊ฑฐ๋ ์์ ๊ฐ์ ์ฐพ์๋ด๋ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ํ๊ธฐ์ํด ๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ๋ผ๊ณ ํ ์ ์๋ค. ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ตฌํ๊ณ ์ ํ ๋ Root์ ๊ฐ์ ๊ฐ์ ธ์ค๋ฉด ๋๋ฏ๋ก O(1)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๐ถ์๋ฃ์ ์ถ๊ฐ
๊ทธ๋ฌ๋ฉด ์ด ํ์ ์๋ฃ๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น?
1. ์๋ก์ด ๋
ธ๋๋ฅผ ํธ๋ฆฌ์ ๋งจ ๋ค์ ์ถ๊ฐํ๋ค. (์์ ์ด์ง ํธ๋ฆฌ์ ํํ๋ฅผ ๊นจ๋ฉด ์๋จ)
2. ์ถ๊ฐ๋ ๋
ธ๋์ ๋ถ๋ชจ ๋
ธ๋๋ฅผ ๋น๊ตํ์ฌ ์์ ๋
ธ๋๊ฐ ํฌ๋ค๋ฉด ์๋ก์ ์์น๋ฅผ ๋ฐ๊พผ๋ค.
3. 2๋ฒ ์์
์ ๋ถ๋ชจ ๋
ธ๋๊ฐ ๋ ํด๋๊น์ง ๋ฐ๋ณตํ๋ค.
์ด๋ฌํ ์์ ์ ํตํด์ฌ ์๋ฃ๋ฅผ ์ถ๊ฐํ ์ ์๋ค. ๊ธ๋ก๋ง ๋ณด๋ฉด ์ดํดํ๊ธฐ ํ๋ค ์ ์์ผ๋ ๊ทธ๋ฆผ์ ํตํด ์์๋ณด์.
MaxHeap์ 50์ ๊ฐ์ ๊ฐ์ง ๋ ธ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ ์ํฉ์ด๋ค. ๊ทธ๋ฌ๋ฉด ์ด ๋ ธ๋๋ ํธ๋ฆฌ์ ๋งจ ๋ค์ธ 13์ rightChild๋ก ๋ค์ด๊ฐ๊ฒ ๋๋ค.
50์ ๋ถ๋ชจ๋ ธ๋์ธ 13๊ณผ ๋น๊ตํ๋ค. 50์ด ํฌ๋ฏ๋ก ๋์ ์๋ฆฌ๋ฅผ ๋ฐ๊ฟ์ค๋ค.
์๋ฆฌ๋ฅผ ๋ฐ๊พธ๊ณ ๋ ๋ฐ๊พผ ์๋ฆฌ์ ๋ถ๋ชจ๋ ธ๋์ธ 44์ ๋น๊ตํ๋ค. ๋ 50์ด ํฌ๋ฏ๋ก ์๋ฆฌ๋ฅผ ๋ฐ๊ฟ์ค๋ค.
์ฌ๋ผ์ค๋ค ๋ณด๋ root ๋ฐ๋ก์๋๊น์ง ์๋ค. ๋ถ๋ชจ ๋ ธ๋์ธ 55์ ๋น๊ตํ์ง๋ง 55๊ฐ ํฌ๋ฏ๋ก ์๋ฆฌ๋ฅผ ๊ณ ์ ํ๊ณ ์๋ฃ์ ์ถ๊ฐ๊ฐ ์๋ฃ๋๋ค. ์ด๋ ๊ฒ ๋๋ฉด Heap์ ํน์ง์ธ ๋ถ๋ชจ ๋ ธ๋๊ฐ ๊ฐ์ง ๊ฐ์ ์์ ๋ ธ๋์ ๊ฐ๋ณด๋ค ๋ฌด์กฐ๊ฑด ํฌ๊ฑฐ๋(Max Heap) ์์์ผ(Min Heap) ํ๋ค. ๋ผ๋ ์กฐ๊ฑด์ด ๋ง์กฑ๋๋ค.
๐ก์๊ฐ๋ณต์ก๋
๊ทธ๋ฌ๋ฉด ์๋ฃ๋ฅผ ์ถ๊ฐํ๋ ์์ ์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ณ์ฐํด๋ณด์. ์ผ๋จ ์ต์ ์ ์ํฉ์ธ ์ถ๊ฐ๋ ๋ ธ๋๊ฐ ๋ถ๋ชจ ๋ ธ๋์ ๋น๊ต๋ฅผ ํ๋ค๊ฐ Root๋ ธ๋์ ๋น๊ตํ๋ ์ํฉ๊น์ง ๊ฐ๋ ๊ฒ์ด ์ต์ ์ ์ํฉ์ผ ๊ฒ์ด๋ค. ์ด๋๋ ํธ๋ฆฌ์ ๋์ด๋งํผ์ ๋น๊ต๋ฅผ ํ๋ค๊ณ ์๊ฐํ ์ ์๋ค. ํธ๋ฆฌ์ ๋์ด๋ ๋ง์ง๋ง ๋ ๋ฒจ๊น์ง ๊ฝ์ฐฌ ํฌํ ์ด์ง ํธ๋ฆฌ์์ log(n+1)๋ก ๋ํ๋ผ ์ ์๊ณ ๊ฝ์ฐจ์ง ์๋๋ผ๋ ์ด์ ๊ทผ์ฌํ๋ฏ๋ก ์๋ฃ๋ฅผ ์ถ๊ฐํ๋ ์๊ฐ๋ณต์ก๋๋ O(logN)์ด๋ค.
๐ถ์๋ฃ์ ์ญ์
๋ค์์ผ๋ก๋ ์๋ฃ์ ์ญ์ ์ด๋ค. ์๋ฃ๊ฐ ์ญ์ ๋๋ ๊ฒฝ์ฐ๋ ๋งจ ์์์๋ Root๋ ธ๋๊ฐ ๋น ์ง๋ ๊ฒฝ์ฐ๋ฐ์ ์๋ค. ๊ทธ๋ ๊ฒ๋๋ฉด ๋ค์ ํ์ ํํ๋ฅผ ๊ฐ์ถ์ด์ผํ๋ค.
1. ๋งจ ๋ค์์๋ ๋
ธ๋๋ฅผ Root์๋ฆฌ๋ก ์ฎ๊ธด๋ค.
2. ์์ ๋
ธ๋์ค ๊ฐ์ด ๋ ํฐ ๋
ธ๋์ ๋น๊ตํ์ฌ ์์ ๋
ธ๋๊ฐ ๊ฐ์ด ๋ ํฌ๋ค๋ฉด ์์น๋ฅผ ๋ฐ๊พผ๋ค.
3. 2๋ฒ์ ์์
์ ์์๋
ธ๋๋ณด๋ค ์์ ์ด ํด๋๊น์ง ๋ฐ๋ณตํ๋ค.
์ด ๋ํ ๊ทธ๋ฆผ์ผ๋ก ์์๋ณด์.
Root๋ ธ๋๊ฐ ๋น ์ง ์ํฉ์ด๋ค. ์ด๋ ๊ฒ ๋๋ฉด ๋งจ๋ค์ ์๋ ๋ ธ๋์ธ 10์ Root๋ก ์ฌ๋ฆฐ๋ค.
Root๋ก ์ฌ๋ฆฌ๊ณ ์์๋ค๊ณผ ๋น๊ต๋ฅผ ์์ํ๊ฒ ๋๋๋ฐ, ์์ ๋์ค์ 44๊ฐ ๋ ํฌ๋ฏ๋ก 44์ ๋น๊ต๋ฅผ ํ๋ค. ๊ทธ๋ฐ๋ฐ 44๊ฐ 10๋ณด๋ค ํฌ๋ฏ๋ก 44์ ์๋ฆฌ๋ฅผ ๋ฐ๊พผ๋ค.
์๋ฆฌ๋ฅผ ๋ฐ๊พธ๊ณ ๋ค์ ๊ฐ์ ์์ ์ ๋ฐ๋ณตํ๋ค. 11๊ณผ 13์ค 13์ด ํฌ๋ฏ๋ก 13๊ณผ ๋น๊ตํ๋ค. 13์ด ๋ํฌ๋ฏ๋ก ์๋ฆฌ๋ฅผ ๋ฐ๊พผ๋ค.
๊ทธ ๊ฒฐ๊ณผ ์ด๋ ๊ฒ ํ์ ๊ตฌ์กฐ๋ฅผ ๋ค์ ์ ์งํ ์ ์๊ฒ ๋์๋ค.
๐ก์๊ฐ๋ณต์ก๋
์ญ์ ๋ ์ถ๊ฐ์ ๊ฑฐ์ ์ ์ฌํ๊ฒ ๋์ํ๋ ๊ฒ์ ๋ณผ ์์๋ค. ๊ฒฐ๊ตญ ์ด๋ ๋ง์ฐฌ๊ฐ์ง๋ก ์ต์ ์ ๊ฒฝ์ฐ ํธ๋ฆฌ์ ์ ์ผ ๊น์๊ณณ๊น์ง ๋ด๋ ค๊ฐ๋ฏ๋ก ํธ๋ฆฌ์ ๋์ด๊ฐ ์ฐ์ฐ ํ์๊ฐ ๋๊ณ ๋ฐ๋ผ์ O(logN)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
๐ป์ฐ์ ์์ ํ(Priority Queue)
์ฐ์ ์์ ํ๋ ์ง๊ธ๊น์ง ์ค๋ช ํ ํ์ ์ด์ฉํ์ฌ ๋ง๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ผ๋ฐ์ ์ธ ํ๋ FIFO, ์ฆ ๋จผ์ ๋ค์ด์จ ๊ฒ์ด ๋จผ์ ๋๊ฐ๋ค๋ ์์น์ ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ ์ด์ง๋ง, ์ฐ์ ์์ ํ๋ ๋ค์ด์จ ์์์๋ ์๊ด์์ด, ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ํฌ๊ฑฐ๋ ์์ ์๋ฃ๊ฐ ๊ฐ์ฅ ๋จผ์ ๋๊ฐ๋ค. ๋ฐ๋ผ์ ํ์ ์ด์ฉํ์ฌ ๊ฐ์ฅ ํฌ๊ฑฐ๋ ์์ ์๋ฃ๋ฅผ O(1)์๊ฐ๋ง์ ์ฐพ์์ ๋ด๋ณด๋ผ ์ ์์ผ๋ฏ๋ก Heap์ ์ฐ๋ ๊ฒ์ด ์ ํฉํ๋ค.
๐ถ๊ตฌํ
์ฐ์ ์์ํ๋ฅผ ๊ตฌํํ๋ฉด์ ์์์ ์ค๋ช ํ ํ๋ํ ๊ฐ์ด ์ดํดํ ์ ์์ ๊ฒ์ด๋ค.
์ฐ์ ์์ํ๋ ๋ฐฐ์ด๋ก ๊ตฌํ๋ ํ์ ํ๋ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ,
๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์ ๊ฐ์ ๋นผ๋ค๋ pop(), ์๋ฃ๋ฅผ ์ถ๊ฐํ๋ push()์ฐ์ฐ์ด ์กด์ฌํ๋ค.
๐น์ ์ฒด์ฝ๋
template <typename T>
class PriorityQueue
{
public:
void push(const T& val)
{
_heap->push_back(val);
int now = _heap->size() - 1;
while (now > 0)
{
int parent = (now - 1) / 2;
if (_heap[now] < _heap[parent])
break;
::swap(_heap[now], _heap[parent]);
now = parent;
}
}
const T& top()
{
return _heap[0];
}
void pop()
{
_heap[0] = _heap->back()
_heap->push_back();
int now = 0;
while(true)
{
int leftChild = now * 2 + 1;
int rightChild = now * 2 + 2;
// leaf node์ผ ๊ฒฝ์ฐ
if (leftChild >= _heap->size())
break;
int next = now;
if (_heap[leftChild] > _heap[next])
next = leftChild;
if (rightChild < _heap->size() && _heap[rightChild] > _heap[next])
next = rightChild;
if (next == now)
break;
::swap(_heap[now], _heap[next]);
now = next;
}
}
bool empty()
{
return _heap->size() == 0;
}
private:
vector<T>* _heap = {};
};
๐นpush()
ํ์ ์๋ฃ๋ฅผ ๋ฃ๋ ์์ ์ด๋ค. heap๋ฐฐ์ด์ ์ง์ด๋ฃ๊ณ ๋ค์ heap์ ๊ตฌ์กฐ๋ฅผ ์กฐ์ ํ๋ ๊ณผ์ ์ ๊ฑฐ์น๋ค.
void push(const T& val)
{
_heap->push_back(val);
int now = _heap->size() - 1;
while (now > 0)
{
int parent = (now - 1) / 2;
if (_heap[now] < _heap[parent])
break;
::swap(_heap[now], _heap[parent]);
now = parent;
}
}
_heap์ด vector๋ก ์ด๋ฃจ์ด์ ธ ์๊ธฐ๋๋ฌธ์ push_back์ ์ด์ฉํด ํ์ ๋งจ๋ค์ ๋ฃ์ด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ์ธ๋ฑ์ค๋ฅผ now๋ก ์ค์ ํ์ฌ ๊ทธ๋ฆผ์์ ๋ดค๋ ๋ถ๋ชจ ๋ ธ๋์ ๋น๊ตํ์ฌ ์๋ฆฌ๋ฐ๊พธ๊ธฐ ์์ ์ ๋ฐ๋ณต ์ํํ๋ค.
๐นpop()
๋ฃจํธ๋ ธ๋๋ฅผ ์ ๊ฑฐํ๋ ์ฐ์ฐ์ด๋ค. ๊ทธ๋ค์๋ ๋ค์ ํ์ ๊ตฌ์กฐ๋ฅผ ์กฐ์ ํ๋ ๊ณผ์ ์ ์ํํ๋ค.
void pop()
{
_heap[0] = _heap->back()
_heap->push_back();
int now = 0;
while(true)
{
int leftChild = now * 2 + 1;
int rightChild = now * 2 + 2;
// leaf node์ผ ๊ฒฝ์ฐ
if (leftChild >= _heap->size())
break;
int next = now;
if (_heap[leftChild] > _heap[next])
next = leftChild;
if (rightChild < _heap->size() && _heap[rightChild] > _heap[next])
next = rightChild;
if (next == now)
break;
::swap(_heap[now], _heap[next]);
now = next;
}
}
์ ์ผ ๋ค์์๋ ๋ ธ๋๋ฅผ ๋ฃจํธ๋ ธ๋๋ก ๋ฐ๊พธ๊ณ ์์๋ ธ๋์ ๋น๊ตํ๋ฉด์ ์๋ฆฌ๋ฐ๊พธ๊ธฐ ์์ ์ ๋ฐ๋ณต ์ํํ๋ค. ์ฌ๊ธฐ์ ์์ ์ด์งํธ๋ฆฌ์ ์ฑ์ง๋ก leftChild = now * 2 + 1์ด ๋๊ณ rightChild = now * 2 + 2์ด ๋๋ค. ๋น๊ตํ๋ ์ฐ์ฐ์ ์ํํ ๋, ํ์ด ๋ฐฐ์ด๋ก ๊ตฌํ๋์ด ์์ผ๋ฏ๋ก ๋ฐ๋ณต์ ํ๋ค๊ฐ ์ธ๋ฑ์ค๋ฅผ ๋ฒ์ด๋ ์ ์์ผ๋ฏ๋ก, ํ์ฌ now ๋ ธ๋๊ฐ leaf node์ธ์ง, ์์์ด ํ๊ฐ์ธ ๋ ธ๋์ธ์ง, ๋๊ฐ๋ค ์๋ ๋ ธ๋์ธ์ง๋ฅผ ๋๋์ด์ ์๊ฐํด์ผํ๋ค.
1. leaf node์ผ ๊ฒฝ์ฐ : ๋ ์ด์ ๋น๊ตํ ๊ฒ ์์ผ๋ฏ๋ก ์ข ๋ฃํ๋ค.
2. ์์ ๋ ธ๋๊ฐ 1๊ฐ์ผ ๊ฒฝ์ฐ : ์์ ๋ ธ๋์ ๋น๊ตํ์ฌ ๊ฐ์ด ์์๋ ธ๋๊ฐ ๋ ํฌ๋ฉด ์์น๋ฅผ ๋ฐ๊พผ๋ค.
3. ์์ ๋ ธ๋๊ฐ 2๊ฐ์ผ ๊ฒฝ์ฐ : ์์ ๋ ธ๋์ค ํฐ ๋ ธ๋์ ์์ ์ ๋น๊ตํ์ฌ ์์๋ ธ๋๊ฐ ๋ ํฌ๋ฉด ์์น๋ฅผ ๋ฐ๊พผ๋ค.
์ด๋ฐ์์ผ๋ก ๊ฒฝ์ฐ๋ฅผ ๋๋์ด์ ๊ตฌํํ ์ ์๋ค. ๋๋ ์กฐ๊ธ ๋ค๋ฅด๊ฒ ์ฝ๋๋ฅผ ์งฐ๋๋ฐ ๊ฒฐ๊ตญ ๊ธฐ๋ณธ์ ์ธ ์๋ฆฌ๋ ๋์ผํ๋ค.
leaf node์ด๋ฉด ๋ฐ๋ณต์ ์ข ๋ฃํ๋ ๊ฒ์ ๋๊ฐ๊ณ ,
1. next๋ผ๋ ๋ณ์๋ฅผ ๋ง๋ค์ด์ ์ผ๋จ now์ ๊ฐ์ ๋ฃ์ด๋๋๋ค.
2. ๊ทธํ next๋ฅผ leftChild์ ๋น๊ตํ์ฌ ํฐ ๊ฐ์ ์ธ๋ฑ์ค๋ก ๋ฐ๊พผ๋ค.
3. rightChild๊ฐ ์๋ค๋ฉด ๊ทธ ๊ฐ๊ณผ ํ์ฌ next ์์น์ ๋ค์ด์๋ ๊ฐ๊ณผ ๋น๊ตํ์ฌ ํฐ ๊ฐ์ ์ธ๋ฑ์ค๋ก ๋ฐ๊พผ๋ค.
์ฌ๊ธฐ ๊น์งํ๋ฉด ๊ฒฐ๊ตญ์๋ ์๊ธฐ ์์ ๊ณผ ์์ ๋ ธ๋ ๋๊ฐ๋ฅผ ๋ชจ๋ ๋น๊ตํ ์ ์ด๋๋ค.
๊ทธ ๊ฒฐ๊ณผ next์ ๊ฐ์ด ๋ณํ์ง ์๊ณ ๊ทธ๋๋ก now๋ผ๋ฉด ํ์ฌ ๋ ธ๋์ ๊ฐ์ด ๊ฐ์ฅ ํฐ ๊ฒ์ด๋ฏ๋ก ์๋ฆฌ๋ฅผ ๋ฐ๊พธ์ง ์๊ณ , ๋ฐ๋ณต์ ์ข ๋ฃํ๋ค. ๊ทธ ๋ฐ๋๋ก next์ ๊ฐ์ด now๊ฐ ์๋๋ผ๋ฉด ๊ทธ ๊ฐ๊ณผ ํ์ฌ ๋ ธ๋์ ์๋ฆฌ๋ฅผ ๋ฐ๊พธ๊ณ , ๊ฐ์ ์์ ์ ๋ฐ๋ณต ์ํํ๋ค.
๐ป๋ง์น๋ฉฐ
์ด ํ์ ๋์ค์ ํ ์ ๋ ฌ์ ํ ๋๋ ์ฐ์ด๊ณ , ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ์ ํฅ์์ํฌ์๋ ์๊ณ , ์ด์ง ํธ๋ฆฌ์ ๊ฐ๋ ์ ํ๋ฆฝํ๋๋ฐ ๊ต์ฅํ ์ข์ ์๋ฃ๊ตฌ์กฐ์ธ ๊ฒ ๊ฐ๋ค. ๋ํ ์ฐ์ ์์ ํ๋ฅผ ์ง์ ๊ตฌํํด๋ณด๋ฉฐ ํ์ ์ญ์ , ์ถ๊ฐ์ ์๋ฆฌ๋ฅผ ์ฝ๋๋ก ์ง์ ๊ณต๋ถํด๋ณผ ์ ์๋ ์ข์ ๊ธฐํ์๋ค. ์ด์ ์์ผ๋ก, A* ๊ธธ์ฐพ๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๋ ์ง, ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ์ ์ด ์ฐ์ ์์ ํ๋ฅผ ์ ์ฉ์์ผ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ฎ์ถ๋ ๊ณต๋ถ๋ฅผ ํด๋ณผ ์๊ฐ์ด๋ค.
'CS > Data Structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ(Tree) (0) | 2022.03.19 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ(Graph) (0) | 2022.03.10 |
[์๋ฃ๊ตฌ์กฐ] ์คํ(Stack), ํ(Queue) (0) | 2022.03.08 |
[์๋ฃ๊ตฌ์กฐ] ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๊ตฌํํ๊ธฐ (0) | 2022.03.08 |
[์๋ฃ๊ตฌ์กฐ] ๋์ ๋ฐฐ์ด ๊ตฌํํ๊ธฐ (0) | 2022.03.08 |
๊ฒ์๊ฐ๋ฐ์๋ฅผ ๊ฟ๊พธ๋ ๋ํ์์ ๊ฐ๋ฐ ๊ณต๋ถ ๋ธ๋ก๊ทธ
ํฌ์คํ ์ด ์ข์๋ค๋ฉด "์ข์์โค๏ธ" ๋๋ "๊ตฌ๋ ๐๐ป" ํด์ฃผ์ธ์!