๊ธฐ๋ณธ ์๋ฃ ๊ตฌ์กฐ โถ๏ธ ๐
์์ฉ ์๋ฃ ๊ตฌ์กฐ โถ๏ธ ๐
- Deque
- Heap & Priority Queue
- Indexed Tree (Segment Tree)
- Trie
์๋ฃ๊ตฌ์กฐ๊ฐ ๋ฌด์์ธ์ง ๋ง์ํด์ฃผ์ธ์.
์๋ฃ๊ตฌ์กฐ๋ ์ปดํจํฐ ๊ณผํ์์ ํจ์จ์ ์ธ ์ ๊ทผ ๋ฐ ์์
์ ๊ฐ๋ฅ์ผ ํ๋ ์๋ฃ์ ์กฐ์ง, ๊ด๋ฆฌ, ์ ์ฅ์ ์๋ฏธํ๋ค.
๋ ์ ํํ ๋งํด, ์๋ฃ ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ ๊ฐ์ ๋ชจ์, ๋ ๋ฐ์ดํฐ ๊ฐ์ ๊ด๊ณ, ๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ์ ์ ์ฉํ ์ ์๋ ํจ์๋ ๋ช
๋ น์ ์๋ฏธํ๋ค.
์ ํ ๊ตฌ์กฐ์ ๋น์ ํ ๊ตฌ์กฐ์ ์ฐจ์ด๊ฐ ๋ฌด์์ธ๊ฐ์?
์๋ฃ๊ตฌ์กฐ๋ ์ ์ฅ๋๋ ๋ฐ์ดํฐ์ ํํ์ ๋ฐ๋ผ ๊ตฌ๋ถ๋๋ค. ์ ํ ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๊ฐ ์ผ๋ ฌ๋ก ๋์ด๋์ด์๊ณ , ๋น์ ํ ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๊ฐ ํน์ ํ ํํ๋ฅผ ๋๊ณ ์๋ค.
๋ฐฐ์ด๊ณผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์ฐจ์ด์ ์ ๋ํด ์ค๋ช ํด์ฃผ์ธ์.
๋ฐฐ์ด์ ๋์ผํ ์๋ฃํ์ ๋ฐ์ดํฐ๋ฅผ ์ผ๋ ฌ๋ก ๋์ดํ ์๋ฃ๊ตฌ์กฐ๋ก์, ๋ฐ์ดํฐ ์ ๊ทผ์ด ์ฉ์ดํ๋ ๋ฐ์ดํฐ์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ๋นํจ์จ์ ์ด๋ค.
์ฐ๊ฒฐ๋ฆฌ์คํธ๋ ๊ฐ ๋ ธ๋๊ฐ ๋ฐ์ดํฐ์ ํฌ์ธํฐ๋ฅผ ๊ฐ์ง๊ณ ์ผ๋ ฌ๋ก ์ฐ๊ฒฐ๋ ์๋ฃ๊ตฌ์กฐ๋ก์, ๋ฐ์ดํฐ์ ์ ๊ทผ์ด O(n)์ผ๋ก ๋๋ฆฌ์ง๋ง ๋ฐ์ดํฐ์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ O(1)๋ก ์ฉ์ดํ๋ค. ๋จ, ๋ฐ์ดํฐ ์ฝ์ /์ญ์ ์ฐ์ฐ ์ด์ ์ ๋ฐ์ดํฐ์ ์ ๊ทผํ๋ ๊ฒ์ด ์ ํ๋๋ฏ๋ก ๋ฐฐ์ด๋ณด๋ค ๋นํจ์จ์ ์ผ ์ ์๋ค.
A-B-C-D ์์๋ก ์ฐ๊ฒฐ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๊ฐ ์์ต๋๋ค. C ๋ ธ๋ ๋ค์์ F ๋ ธ๋๋ฅผ ์ฝ์ ํ ๋์ ๊ณผ์ ์ ์ค๋ช ํด์ฃผ์ธ์.
-
F์ next node๋ฅผ C์ next node์ธ D๋ก ์ค์ ํ๋ค.
A-B-C-D
F-D
-
C์ next node๋ฅผ F๋ก ์ค์ ํ๋ค.
A-B-C-F-D
์คํ์ผ๋ก ํ๋ฅผ ๊ตฌํํ ์ ์์๊น์?
๋ค. 2๊ฐ์ ์คํ์ ์ด์ฉํ์ฌ ๊ตฌํํ ์ ์์ต๋๋ค. Enqueue ์ฐ์ฐ์ ์ฒซ๋ฒ์งธ ์คํ์ ์์๋ฅผ ์ถ๊ฐํ๋ฉด ๋ฉ๋๋ค. Dequeue ์ฐ์ฐ์ ๋๋ฒ์งธ ์คํ์ ์ด์ฉํฉ๋๋ค. ์ฐ์ ๋๋ฒ์งธ ์คํ์ด ๋น์ด์๋ค๋ฉด ์ฒซ๋ฒ์งธ ์คํ์ด ๋น ๋๊น์ง ์ฒซ๋ฒ์งธ ์คํ์ ์์๋ฅผ popํ๊ณ ๋๋ฒ์งธ ์คํ์ pushํ๋ ๊ฒ์ ๋ฐ๋ณตํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ฒ์งธ ์คํ์ด ๋น์ด์์ง ์๋ค๋ฉด ๋๋ฒ์งธ ์คํ์ ์์๋ฅผ popํ๋ฉด ๋ฉ๋๋ค.
ํ๋ก ์คํ์ ๊ตฌํํ ์ ์์๊น์?
๋ค. 2๊ฐ์ ํ๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํํ ์ ์์ต๋๋ค. push
์ฐ์ฐ์ ์ฒซ๋ฒ์งธ ํ์ ์์๋ฅผ ์ถ๊ฐํ๊ธฐ ์ ์ ์ฒซ๋ฒ์งธ ํ๊ฐ ๋น๋๊น์ง ๋๋ฒ์งธ ํ๋ก ๊ฐ์ ์ฎ๊ฒจ์ค๋๋ค. ๊ทธ ํ ์ฒซ๋ฒ์งธ ํ์ ์์๋ฅผ ์ถ๊ฐํ๊ณ ๋๋ฒ์งธ ํ์์ ๋ค์ ์ฒซ๋ฒ์งธ ํ๋ก ๋น๋๊น์ง ์์๋ค์ ์ ๋ถ ๋ค์ ์ฎ๊ฒจ์ค๋๋ค. ์ฝ๊ฒ ๋งํ์๋ฉด ์์๋ฅผ ์ถ๊ฐํ ๋๋ง๋ค ์์๋ค์ ์์น๋ฅผ ์คํ์ ๋ง๊ฒ ๋ณ๊ฒฝ์ํค๋ ๊ฒ์
๋๋ค. pop
์ฐ์ฐ์ ์ฒซ๋ฒ์งธ ํ์์ dequeue๋ง ํ๋ฉด ๋ฉ๋๋ค.
ํ์ ๋ฑ์ ์ฐจ์ด์ ์ ๋ฌด์์ผ๊น์?
ํ
๋ front์์๋ง output์ด ๋ฐ์ํ๊ณ rear์์๋ง input์ด ๋ฐ์ํ๋ ์
์ถ๋ ฅ์ ๋ฐฉํฅ์ด ์ ํ๋์ด ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ๋ฐ๋ฉด ๋ฑ
์ ์๋ฐฉํฅ์์ ์
์ถ๋ ฅ์ด ๊ฐ๋ฅํ๋ค.
ํ๋ณด๋ค ๋ฑ์ ์ฌ์ฉํ์ ๋ ๋ ํจ์จ์ ์ธ ๊ฒฝ์ฐ๊ฐ ์์๊น์?
์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ํํ ๋ ์ค์ผ์ค๋ง์ด ๋ณต์กํด์ง์๋ก ๋ฑ์ด ๋ ํจ์จ์ ์ผ๋ก ๋์ํ๋ค. ์ฆ, ์ฐ์ ์์๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์์ด ์คํ๊ณผ ํ์ ๋นํด ์ด์ ์ ๊ฐ๋๋ค.
์๋ฅผ ๋ค์ด ์ค๋๋ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ์ฃผ๊ณ ์ถ๋ค๋ฉด ์์ ์๋ ํ๋ก์ธ์ค๋ฅผ ๋นผ๋ด์ผํ๋๋ฐ ์ด๋ ์คํ์์ ๋ถ๊ฐ๋ฅํ๊ณ ์ต๊ทผ์ ๋ค์ด์จ ํ๋ก์ธ์ค์ ์ฐ์ ์์๋ฅผ ๋๊ณ ์ถ๋ค๋ฉด ํ์์ ๋ถ๊ฐ๋ฅํ๋ค. ๋ฐ๋ฉด ๋ฑ์ ๋ ๊ฒฝ์ฐ ๋ชจ๋์์ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
ํธ๋ฆฌ๋ผ๋ ์๋ฃ๊ตฌ์กฐ๊ฐ ๋ฌด์์ธ์ง ๊ฐ๋ตํ๊ฒ ํ ์ค๋ก ์ค๋ช ํด๋ณด์ธ์.
์๋ฃ๋ค ์ฌ์ด์ ๊ณ์ธต์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋๋ฐ ์ฌ์ฉํ๋ ์๋ฃ๊ตฌ์กฐ๋ก ๋ถ๋ชจ-์์๊ด๊ณ๋ก ํํํฉ๋๋ค.
ํธ๋ฆฌ์ ์ฉ์ด์ค '๊น์ด' ๋ผ๋ ์ฉ์ด์ ์ ์๋ ๋ฌด์์ธ๊ฐ์?
๋ฃจํธ ๋ ธ๋์์ ํด๋น๋ ธ๋๊น์ง ๋๋ฌํ๋๋ฐ ์ฌ์ฉํ๋ ๊ฐ์ ์ ๊ฐ์๋ฉฐ, ๋ฃจํธ๋ ธ๋์ ๊น์ด๋ 0์ ๋๋ค.
ํฌํ ์ด์งํธ๋ฆฌ์ ์์ ์ด์งํธ๋ฆฌ์ ์ฐจ์ด์ ์ ๋ฌด์์ธ๊ฐ์?
- ํฌํ ์ด์ง ํธ๋ฆฌ(Perfect Binary Tree) : ์ ์ด์งํธ๋ฆฌ(Full Binary Tree)์์ ๋ชจ๋ ๋จ๋ง ๋ ธ๋์ ๊น์ด๊ฐ ๊ฐ์ ์ด์งํธ๋ฆฌ
- ์์ ์ด์ง ํธ๋ฆฌ(Complete Binary Tree) : ๋ง์ง๋ง ๋ ๋ฒจ์ ๋ ธ๋๊ฐ ์ผ์ชฝ์ ๋ชฐ๋ ค์๊ณ , ๋ง์ง๋ง ๋ ๋ฒจ์ ์ ์ธํ๋ฉด ํฌํ์ด์งํธ๋ฆฌ(Perfect Binary Tree) ๊ตฌ์กฐ๋ฅผ ๋๊ณ ์์
ํธ๋ฆฌ์ ์ํ์ ๋ํด ์๊ณ ์๋ ๊ฒ ํ ๊ฐ์ง ๋งํด์ฃผ์ธ์.
- ์ ์ ์ํ(Pre-order) : ํ์ฌ ๋ ธ๋ ๋ฐฉ๋ฌธ -> ์ผ์ชฝ ์์ ํ์ -> ์ค๋ฅธ์ชฝ ์์ ํ์
- ์ค์ ์ํ(In-order) : ์ผ์ชฝ ์์ ํ์ -> ํ์ฌ ๋ ธ๋ ๋ฐฉ๋ฌธ -> ์ค๋ฅธ์ชฝ ์์ ํ์
- ํ์ ์ํ(Post-order) : ์ผ์ชฝ ์์ ํ์ -> ์ค๋ฅธ์ชฝ ์์ ํ์ -> ํ์ฌ๋ ธ๋ ๋ฐฉ๋ฌธ
๊ตฌ๊ฐํฉ ๋ฌธ์ ๋ฅผ ๋์ ํฉ์ผ๋ก ํ์ดํ๋ค๋ฉด, ๋จ์ ์ ๋ฌด์์ด๋ฉฐ ๊ทธ์ ๋นํด ์ธ๋ฑ์ค ํธ๋ฆฌ๊ฐ ๊ฐ๋ ์ฅ์ ์ ๋ฌด์์ธ์ง ์๊ฐ๋ณต์ก๋๋ฅผ ๋ค์ด ์ค๋ช ํด์ฃผ์ธ์.
๋์ ํฉ์ผ๋ก ํ ๊ฒฝ์ฐ ๋์ ํฉ์ ๊ตฌํ๋๋ฐ O(N), ์ด๋ฅผ M๋ฒ ์ํํ๋ฉด O(MN)์ด ๊ฑธ๋ฆฐ๋ค. ํ์ง๋ง ์ธ๋ฑ์ค ํธ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ ๋์ ํฉ์ ๊ตฌํ๋๋ฐ O(logN)์ด ๊ฑธ๋ฆฌ๋ฏ๋ก, ์ด๋ฅผ M๋ฒ ์ํํ๋ฉด O(MlogN)์ด ๊ฑธ๋ฆฌ๊ธฐ์ ๊ตฌ๊ฐํฉ์ ์ฌ๋ฌ์ฐจ๋ก ๊ตฌํ๋ ์ค๊ฐ์ ๋ฐฐ์ด์ ๊ฐ์ด ๋ฐ๋๋ ๊ฒฝ์ฐ ์ธ๋ฑ์ค ํธ๋ฆฌ๊ฐ ์ ํฉํ๋ค.
์ธ๋ฑ์ค ํธ๋ฆฌ์์ ์ฝ์ ์ด ์ผ์ด๋ ๋์ ์๊ฐ๋ณต์ก๋๋ ๋ช์ธ๊ฐ์?
์ํ์๊ฐ์ O(logN)์ด๋ค.
ํ์ด๋ ๋ฌด์์ผ๊น์?
ํ์ ์ต๋๊ฐ ๋ฐ ์ต์๊ฐ์ ์ฐพ์๋ด๋ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด ๊ณ ์๋ ์์ ์ด์งํธ๋ฆฌ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ ์๋ฃ๊ตฌ์กฐ๋ก์ ๋ค์๊ณผ ๊ฐ์ ํ ์์ฑ์ ๋ง์กฑํ๋ค.
A๊ฐ B์ ๋ถ๋ชจ๋
ธ๋ ์ด๋ฉด, A์ ํค๊ฐ๊ณผ B์ ํค๊ฐ ์ฌ์ด์๋ ๋์๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๋ค.
์ต๋ ํ์ ๊ฒฝ์ฐ A > B
๋ฅผ ๋ง์กฑํ๊ณ ,
์ต์ ํ์ ๊ฒฝ์ฐ A < B
๋ฅผ ๋ง์กฑํ๋ค.
์ด๋ ๊ฒ ํ์ ๋ถ๋ชจ์ ์์๋
ธ๋ ๊ฐ์ ๋์๊ด๊ณ๋ฅผ ๋ง์กฑํ๋ ๋์จํ ์ ๋ ฌ ์ํ
๋ฅผ ๊ฐ์ง ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๊ทธ๋ฆผ์ ํ ๊ตฌ์กฐ์์ ์ญ์ ์ฐ์ฐ์ด ์ผ์ด๋ฌ์ ๋ ํ์ ๋ณํ๋ฅผ ์์ ํ์ธ์.
- ๋ฃจํธ ๋ ธ๋ ๊ฐ์ ์ญ์ ํ๋ค. (44 ์ญ์ )
- ๊ฐ์ฅ ๋ง์ง๋ง ๋ฆฌํ๋ ธ๋๋ฅผ ๋ฃจํธ ๋ ธ๋๋ก ์ด๋ํ๋ค. (14๊ฐ ๋ฃจํธ ๋ ธ๋๋ก ์ด๋)
- Heapify ์งํ
Heapify๋ ๋ฃจํธ๋ ธ๋๋ถํฐ ์์ํ์ฌ ํ์ ๊ตฌ์กฐ๋ฅผ ๋ง์กฑํ ๋๊น์ง ๋ถ๋ชจ/์์ ๋ ธ๋ ๊ฐ Swap์ฐ์ฐ์ ํ๋ฉฐ ๋ฐ์ผ๋ก ๋ด๋ ค๊ฐ๋ ์ฐ์ฐ์ ์๋ฏธํ๋ค.
a. ํ์ฌ ๋
ธ๋์ ์์๋
ธ๋๊ฐ ํ์ฌ ๋
ธ๋๋ณด๋ค ํด ๊ฒฝ์ฐ SWAPํ๋ค. (14<->42) (14<->33)