๋ต
Stack์ ๋จผ์ ๋ค์ด์จ ์๋ฃ๊ฐ ๋์ค์ ๋๊ฐ๋ ๊ฒ์ ๋๋ค. ์ฆ FILO(First In Last Out)์ ๋๋ค. Stack์ ์ ๊ทผ์ฑ์ ์ ํ์ด ์๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค. ์ค์ง ๋งจ ์์ ์ถ๊ฐ(push)ํ ์ ์๊ณ , ๋งจ ์์ ๊ฒ๋ง ๋๊ฐ(pop) ์ ์์ต๋๋ค.
Queue๋ ๋จผ์ ์จ ์ฌ๋์ด ๋จผ์ ๋๊ฐ๋ ๊ฒ์ ๋๋ค. ์ฆ FIFO(First In First Out)์ ๋๋ค. Enqueue(๋ค์ด์ด)๊ณผ Dequeue(๋๊ฐ) ๋๊ฐ์ง ๋์๋ง ํ์ฉ๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค
Stack๊ณผ Queue์ ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ item์ ์ญ์ ํ ๋์ ๋๋ค. ์คํ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ์ถ๊ฐ๋์ด ์๋ item์ ์ญ์ ํ๊ณ , Queue๋ ์ฒ์์ผ๋ก ๋ค์ด์ ์๋ item์ ์ญ์ ํฉ๋๋ค.
๋ต
ํ์ ํน์ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ์ํํ๊ธฐ ์ํ ์ด์ง ํธ๋ฆฌ ์๋ฃ ๊ตฌ์กฐ๋ก ๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋๊ฐ์ ์ผ๋ จ์ ๊ท์น์ ํตํด ์ผ๊ด์ฑ ์๋ ๊ฒฐ๊ณผ๋ฅผ ๋์ถํด๋ด๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
์ต์ ํ์ ๋ถ๋ชจ๊ฐ ์์๋ณด๋ค ์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ฉฐ ๋ฃจํธ๋ ธ๋๊ฐ ์ฆ ์ ์ฒด ๋ฐ์ดํฐ์ ์ต์๊ฐ์ด ๋๋ค. ๋ฐ๋๋ก ์ต๋ ํ์ ๋ถ๋ชจ๊ฐ ์์๋ณด๋ค ํฐ ์๋ฃ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ ๋ฃจํธ๋ ธ๋๋ ์ ์ฒด ๋ฐ์ดํฐ์ ์ต๋๊ฐ์ ๋ํ๋ธ๋ค.
Binary Heap์ ๊ตฌํํ ๊ฒฝ์ฐ ์ด์ง ํธ๋ฆฌ์ Root ๋ ธ๋๋ถํฐ ๋จ์ผ leaf ๋ ธ๋๊น์ง์ ์ํ ๋น์ฉ๋ง ๊ฐ์ง ๋ฟ์ด๋ฏ๋ก Insert์ Delete ์ฐ์ฐ์ด ๋ชจ๋ O(logN)์ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ฉฐ ์ต์ํ/์ต๋ํ ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ํ์ ๊ตฌํํ๋ ๊ฒฝ์ฐ, ์กฐํ(Peek)์ ์๊ฐ ๋ณต์ก๋๋ O(1)๋ก ์์ฃผ ํจ์จ์ ์ด๋ค.
Priority Queueย ๋ฅผ Heap ์ ์ด์ฉํด ๋ง๋ค ์ ์์ง๋ง Heap ๊ณผ Priority Queue ๊ฐ์๋ ์ง์ ์ ์ธ ์ฐ๊ด์ ์์ผ๋ฉฐ ๋ค๋ง ๊ตฌํ์ ์์ด์๋, ๊ธฐ๋ฅ์ ์์ด์๋ Heap ์ ์ด์ฉํด ๋ง๋๋ ๊ฒ์ด ํจ๊ณผ์ ์ด๋ฏ๋ก ๊ฑฐ์ ๋์ผ์ด๋ ๋ค๋ฆ์์ด ํผ์ฉ๋๊ณ ์์ ๋ฟ์ด๋ค.
์ถ์ฒ:
https://jins-dev.tistory.com/entry/ํHeap-์ฐ์ ์์ํPriority-Queue-์-๊ตฌํ๊ณผ-์ฑ์ง
[Jins' Dev Inside]
๋ต
tree์๋ฃ๊ตฌ์กฐ๋ ๊ทธ๋ํ์ ํ ์ข ๋ฅ๋ก, ์ด๋ค ๋ ธ๋๋ค์ ์งํฉ์ผ๋ก ๋ ธ๋๋ค์ ๊ฐ ์๋ก ์ฌ์ฌ์ฉ ๋์ง ์๋ ๊ตฌ์กฐ์ ๋๋ค. ๋ํ ํธ๋ฆฌ์ ๊ฐ์ฅ ๋น๋ฒํ ์ฌ์ฉ์ด ๋๋ Binary Tree์์ ํน์ ๋ ธ๋์ ๋ํ ์ ๊ทผ O(N)์ด ์๋ O(logN)์ด ๋จ์ ์ด์ฉํ๋ ๊ฒ์ ๋๋ค.
ํธ๋ฆฌ์ ์ข ๋ฅ๋ ํฌ๊ฒ Binary Tree์ None-Binary Tree๋ก ๋๋ ์ ์์ต๋๋ค. Binary Tree๋ ์ด์ง ํธ๋ฆฌ๋ก ๊ฐ ๋ ธ๋์ ๋ํด์ ๋๊ฐ ์ดํ์ ์์์ ๊ฐ์ง์ ์๋ฏธํ๊ณ , non-binary tree์ ๊ฒฝ์ฐ ๋ ธ๋์ ์์ ๊ฐ์์ ๋ํ ์ ํ์ด ์์์ ์๋ฏธํฉ๋๋ค.
์ด์งํธ๋ฆฌ๋ ํ์ฉ๋์ ๋ฐ๋ผ ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋๋์ด์ง๋๋ค. BST(Binary-Search-Tree)๋ ๊ฐ์ฅ ์ ๋ช ํ๊ณ ์ ๊ทผ์ฑ์ด ์ฉ์ดํ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ๊ฐ ๋ ธ๋๋ left Subtree ์ right Subtree์ ๋ฃจํธ๋ฅผ ์์์ผ๋ก ๊ฐ์ง๋ฉฐ ์ด๋ ์ผ์ชฝ ์๋ธํธ๋ฆฌ๋ ์์ ๋ณด๋ค ์์๊ฐ์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ ์์ ๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ์ง๋ ํํ์ ์ด์งํธ๋ฆฌ์ ๋๋ค. BST์ ์ฅ์ ์ ์๋ฃ ์ ๋ ฅ,์ญ์ ,ํ์ ๋ชจ๋ ์๊ฐ๋ณต์ก๋๊ฐ O( log N ) ์ด๋ผ๋ ์ ์ ๋๋ค. ๊ธฐ๋ณธ์ ์ธ ๋ฐฐ์ด ์ด์งํ์์ ๊ฒฝ์ฐ ์๊ฐ๋ณต์ก๋๋ ๋์ผํ์ง๋ง ์๋ฃ์ ๋ณ๊ฒฝ, ์ญ์ ๊ฐ ๋ถ๊ฐ๋ฅํ์ต๋๋ค.
AVL ํธ๋ฆฌ๋ ์ด์งํ์ํธ๋ฆฌ์ ํ ์ข ๋ฅ์ ๋๋ค. ์ด์ง ํ์ ํธ๋ฆฌ๋ ์ด์งํธ๋ฆฌ์ ํ ์ข ๋ฅ์ ๋๋ค. ๋ฐ๋ผ์ AVL ํธ๋ฆฌ๋ ์ด์งํธ๋ฆฌ์ ์ด์งํ์ ํธ๋ฆฌ์ ํน์ง๋ค์ ๋ชจ๋ ๊ฐ๊ณ ์์ต๋๋ค.
AVL ํธ๋ฆฌ์ ํน์ง
1) ์ด๋ค ๋ ธ๋๋ผ๋ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด ์ฐจ์ด๊ฐ 1๋ณด๋ค ํฌ์ง ์๋ค. (์ต๋ ๋์ด ์ฐจ์ด๋ 1์ด๋ค)
โ Binary Tree์ด๋ฉด์ ์ต๋ ๋์ด ์ฐจ์ด๊ฐ 1์ด๋ผ๋ ๋ง์ height = O(logN)์ด๋ผ๋ ๊ฒ๊ณผ ๊ฐ๋ค.
2) ๋ง์ฝ ํน์ ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ญ์ ํ์ ๋ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด ์ฐจ์ด๊ฐ 1๋ณด๋ค ์ปค์ง๋ ๋ ธ๋๊ฐ ์๊ธด๋ค๋ฉด, re-balancing์ ํตํด a ๊ท์น์ ์ด๊ธ๋์ง ์๋๋ก ํ๋ค.
โ ์ด ๋ง์ AVL ํธ๋ฆฌ๋ ์๊ฐ ๊ท ํ ์ด์ง ํ์ ํธ๋ฆฌ๋ผ๋ ๋ง๊ณผ ๊ฐ๋ค.
3) ๊ท ํ ํธ๋ฆฌ์ด๋ค. (๋์ด ๊ท ํ ํธ๋ฆฌ)
โ ๊ท ํ ํธ๋ฆฌ๋ ์๋ ์ธ๊ฐ์ง ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ๋ ํธ๋ฆฌ์ด๋ค.
์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด ์ฐจ์ด๊ฐ ์ต๋ 1์ด๋ค.
์ผ์ชฝ ์๋ธํธ๋ฆฌ๊ฐ ๊ท ํ ํธ๋ฆฌ์ด๋ค.
์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๊ฐ ๊ท ํ ํธ๋ฆฌ์ด๋ค.
4) ๊ฐ ๋ ธ๋๋ ๊ท ํ๊ฐ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ด ๊ท ํ๊ฐ์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด์์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ๋์ด๋ฅผ ๋บ ๊ฐ์ด๋ค. ์ด ๊ฐ์ ํญ์ {-1, 0, 1} ์ ์ค ํ๋์ ๊ฐ์ด์ด์ผ ํ๋ค.
5) ๊ท ํ ๊ฐ์ด ๋ง์ด๋์ค๋ฉด left-heavy, ํ๋ฌ์ค ๊ฐ์ด๋ฉด right-heavy๋ผ๊ณ ํ๋ค.
6) pivot ๋ ธ๋๋ ์๋ก์ด ๋ ธ๋๊ฐ ์ถ๊ฐ๋์์ ๋ ๊ท ํ๊ฐ์ ๋ณ๋์ด ๋ฐ์ํ์ฌ unbalanced ๋ ๋ ธ๋๋ค ์ค ์ ๊ท๋ ธ๋์ ๊ฐ์ฅ ๊ฐ๊น์ด ๋ ธ๋๋ฅผ ๋งํ๋ค.
AVLํธ๋ฆฌ์ ๋ ธ๋๋ฅผ ์ถ๊ฐ ๋๋ ์ญ์ ๋ฅผ ํ๊ฒ ๋๋ฉด ์ค์ค๋ก ๊ท ํ์ ๋ง์ถ๊ธฐ ์ํด ํธ๋ฆฌ์ ํ์ ์ ํ ํ์๊ฐ ์์ต๋๋ค.
์ผ์ผ : ๋ถ๋ชจ ๋ ธ๋์ pivot ๋ ธ๋์ ๊ท ํ๊ฐ์ด ๋ชจ๋ left-heavy์ธ ๊ฒฝ์ฐ
โ Single Right rotation (์ค๋ฅธ์ชฝ์ผ๋ก 1ํ์ )
์ค์ค : ๋ถ๋ชจ ๋ ธ๋์ pivot ๋ ธ๋์ ๊ท ํ๊ฐ์ด ๋ชจ๋ right-heavy์ธ ๊ฒฝ์ฐ
โ Single Left rotation (์ผ์ชฝ์ผ๋ก 1ํ์ )
์ผ์ค : ๋ถ๋ชจ ๋ ธ๋์ pivot ๋ ธ๋์ ๊ท ํ๊ฐ์ด ๊ฐ๊ฐ right-heavy, left-heavy์ธ ๊ฒฝ์ฐ
โ Double Left-Right rotation (์ผ์ชฝ์ผ๋ก ํ๋ฒ, ์ค๋ฅธ์ชฝ์ผ๋ก ํ๋ฒ ์ด ๋๋ฒ์ ํ์ )
์ค์ผ : ๋ถ๋ชจ ๋ ธ๋์ pivot ๋ ธ๋์ ๊ท ํ๊ฐ์ด ๊ฐ๊ฐ left-heavy, right-heavy์ธ ๊ฒฝ์ฐ
โ Double Right-Left rotation (์ค๋ฅธ์ชฝ์ผ๋ก ํ๋ฒ, ์ผ์ชฝ์ผ๋ก ํ๋ฒ ์ด ๋๋ฒ์ ํ์ )
์ถ์ฒ :
http://www.secmem.org/blog/2019/05/09/ํธ๋ฆฌ์-์ข ๋ฅ์-์ดํด/
๋ต
DFS(๊น์ด์ฐ์ ํ์)๋ ์คํ ํน์ ์ฌ๊ทํธ์ถ์ ํตํด ๊ทธ๋ํ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ๊น์ด์ฐ์ ํ์์ ์ฐ์ ๋(ํ์ฌ ๋ ธ๋)๋ฅผ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ ๋์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ๊ฒ๋ค ์ค ํ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๋ฐฉ๋ฌธํ๋ ๋ ธ๋๋ ๋ฐฉ๋ฌธํ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด,ย DFS ์๊ณ ๋ฆฌ์ฆ์ ๋ฏธ๋ก๋ฅผ ํ์ํ ๋ ํ ๋ฐฉํฅ์ผ๋ก ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ค๊ฐ ๋ ์ด์ ๋ค๋ฅธ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ ์ ์๋ ๋ ธ๋์ ์ด๋ฅด๋ ์ ๋, ๋ค์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ๋๊ธธ๋ก ๋์๊ฐ ๋ฐฉ๋ฌธํ์ง ์์ ๋ ธ๋ ๋ฐฉํฅ์ผ๋ก ๋ค์ ํ์์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์ด์ด๋๊ฐ๋ ๋ฐฉ๋ฒ๊ณผ ์ ์ฌํ๊ฒ ๋์ํฉ๋๋ค. ํนํ ๊ทธ๋ํ์์ ๊ฐ์ ์ด๋ ๋ณ์ ์ ๋ณด๋ฅผ ์์๋ก ๋ณ๊ฒฝํด์ผ ํ๋ ๋ฌธ์ ๋ DFS๋ฅผ ํ์ฉํ๋ ๊ฒ์ด ํจ๊ณผ์ ์ด๋ผ๋ ํน์ง์ด ์์ต๋๋ค.
BFS(๋๋น์ฐ์ ํ์)์ Queue๋ฅผ ์ด์ฉํ์ฌ ๊ทธ๋ํ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋๋ค. ์ธ์ ํ ๋ชจ๋ ๋ ธ๋๋ค์ ๋์์ ๋ฐฉ๋ฌธํ์ฌ ํ์์ ์งํํ๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
BFS ์๊ณ ๋ฆฌ์ฆ์ ์ฃผ๋ก ๊ทธ๋ํ์์ ๋ชจ๋ ๊ฐ์ ์ ๋น์ฉ์ด ๋์ผํ ์กฐ๊ฑด์์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ "๋ฏธ๋ก๋ฅผ ๋น ์ ธ๋๊ฐ๋ ์ต๋จ ๊ฑฐ๋ฆฌ(๊ฒฝ๋ก)"๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ๋ฑ์์ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ ์ ์๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค
์ถ์ฒ:
https://heytech.tistory.com/56
[Hey Tech]