โ 1. ์ฐ์ ์์ ํ
(1) ํ
- FIFO(First In First Out) - ๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ์ญ์ ๋๋ ์๋ฃ ๊ตฌ์กฐ ( ๋จผ์ ์ฒ๋ฆฌ๋๋ ๋ฐ์ดํฐ )

(2) ์ฐ์ ์์ ํ
- ์์ ํ ๊ตฌ์กฐ์์ ๋ง์ฝ ์ค๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ๋นผ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ์กด์ฌ ํ ๋ ์ฌ์ฉ๋๋ ํ๊ฐ ์ฐ์ ์์ ํ์.

- ์ฆ, ์ฐ์ ์์๊ฐ ๋์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ์ฒ๋ฆฌ๊ฐ ๋๋ Queue ์๋ฃ๊ตฌ์กฐ๋ก ๋ณผ ์ ์์.
(3) ์ฐ์ ์์ ํ - ๋ฐฐ์ด ๊ตฌํ

- ์์ ํ์ ์ด๋ฏธ์ง๋ ๋ฐฐ์ด ๋ฐฉ์์ผ๋ก ๊ตฌํ ๋ ํ์ ๋ชจ์ต์ด๋ค.
- ๋จผ์ ๋ฐ์ดํฐ๊ฐ ์ฝ์ ์ด ๋๋ฉด, rear ํฌ์ธํฐ๊ฐ ์ค๋ฅธ์ชฝ์ผ๋ก ์์ง์ด๋ฉด์ ํด๋น ์์น์ ๋ฐ์ดํฐ๊ฐ ์ฝ์ ์ด ๋๋ค.
- ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๋ ์์ (์ญ์ ์์ )์ ํ๋ฉด front ํฌ์ธํฐ๊ฐ ํ ์นธ์ฉ ์ด๋ํ๋ฉด์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๋ฉด์ ์ญ์ ํ๊ฒ ๋๋ค.

- ๋ฐฐ์ด์ ์ฐ์ ์์ ํ๋ฅผ ์ ๋ชฉํ๊ฒ ๋๋ฉด, ์์ ๊ฐ์ด ํน์ ์กฐ๊ฑด์ ํด๋นํ๋ ์ซ์๋ฅผ front ์ ๋ถ๋ถ์ผ๋ก ์ฎ๊ธฐ๊ฒ ๋๋ค.
- ๊ทธ๋ฌ๋ฉด front ๋ ํน์ ์กฐ๊ฑด์ ํด๋นํ๋ 2(์์)๋ฅผ front ์ ๋ถ๋ถ์ผ๋ก ์ฎ๊ธฐ๊ฒ ๋๋ค.
- ๋ํ, ์ฎ๊ฒจ์ง ๋ถ๋ถ์๋ ๊ธฐ์กด์ ํ์ ์์์ ๋ง๊ฒ ์ ๋ ฌ์ ํ๊ฒ ๋๋ค. ( ๋ณดํต ํฐ๊ฐ/์์๊ฐ์ ์ฐ์ ์์ ๊ธฐ์ค์ผ๋ก ์ )
- ์ด๋ ๊ฒ ๋ฐฐ์ด๋ก ๊ตฌํํ ์ฐ์ ์์ ํ๋ ์์๊ฐ์ด ์ค๋ฒํค๋๊ฐ ํฐ ์์ ์ ์ํ ํ ์ ๋ฐ์ ์๊ฒ ๋๋ค.
- ์ค๋ฒํค๋: ์ด๋ค ์์ ์ ์ํํ๊ธฐ ์ํด ์ถ๊ฐ๋ก ๋๋ ๋น์ฉ์ ์๋ฏธํจ.
(4) ์ฐ์ ์์ ํ - ํต์ฌ
- ์ฐ์ ์์ ํ๋ ๋ฐฐ์ด๋ก ๊ตฌํํ๋ฉด ์ค๋ฒํค๋๊ฐ ๋ง์ด ๋ฐ์ํจ.
- ๊ทธ๋์ ์ฐ์ ์์ ํ๋ ํ์ผ๋ก ๊ตฌํํ๋ฉด ์ค๋ฒํค๋๋ฅผ ์ค์ผ ์ ์์.
โ 2. ํ ์ถ์ ์๋ฃํ
(1) ํ - ์ ์
- ํ์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ๋ฐ์ดํฐ๋ง ๋น ๋ฅด๊ฒ ๋ฝ๊ธฐ ์ํด์ ๋ง๋ค์ด์ง ์๋ฃ๊ตฌ์กฐ์.
- ์์ ์ด์ง ํธ๋ฆฌ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ง ์ฐ์ ์์ ์ค์ฌ์ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ, ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ์ฆ, ๊ธฐ์ค์ ๋ฐ๋ผ ์ฐ์ ์์๋ฅผ ์ ํ ๋ค ํด๋น ์ฐ์ ์์์ ๋ง์ถฐ์ ๊บผ๋ด๊ธฐ ์ํ ๊ตฌ์กฐ๋ผ๊ณ ๋ณผ ์ ์์.
- ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ ๋ง๋ค์ด์ง๊ฒ ํ์ด๊ธฐ ๋๋ฌธ์, ๊ธฐ๋ณธ์ ์ธ ํ์ ๊ท์น์ ๋ฐ๋ฅด๊ณ ์์.
- ๊ท์น: ํ์ ํธ๋ฆฌ ๊ตฌ์กฐ์์ ์ค๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฝ์ ์ ์๊ฒ ๋์ด์๋ ๋ฑ ์ด๋ฐ ๊ท์น์ด ์กด์ฌํจ.
(2) ํ - ์ถ์ ์๋ฃํ
- ํ ๊ฐ์ฒด: ๋ถ๋ถ์ ์ผ๋ก ์ ๋ ฌ๋ ์์ ์ด์งํธ๋ฆฌ๋ก ๋ถ๋ชจ๋ ธ๋๋ ์์๋ ธ๋ ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๋ค.
[ ์ฐ์ฐ ]

- ์์์ ๋งํ ๊ฒ ์ฒ๋ผ ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ํ
- ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ๊ฐ ํ์ด๊ธฐ ๋๋ฌธ์, ํ์ ๊ท์น์ ๋ฐ๋ฅด๊ฒ ๋จ.
- delete() ํจ์๋ฅผ ๋ณด๋ฉด ํ(๋ฃจํธ)์์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ์ ์์ง, ์ค๊ฐ ๋ ธ๋์ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ ์ ์์. ( Queue ๊ท์น )
(3) ํ - ์ข ๋ฅ
[ ์ต์ ํ ]

- ๋ฃจํธ ๋ ธ๋๊ฐ ์ ์ฒด ๋ ธ๋ ์ค์์ ์ต์๊ฐ์ธ ํ์ ์๋ฏธํ๋ค.
- ํธ๋ฆฌ์ ๋ชจ๋ ๋ ธ๋๊ฐ ์์ ๋ ธ๋๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ง๋ค.
- ํธ๋ฆฌ์ ๋ ๋ฒจ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๊ฐ ์์๋ฅผ ๊ฐ์ง๋ ์์. ( ๊ฐ์ ๋ ๋ฒจ์์ ์ ๋ ฌ X )
- ํ์ ํธ๋ฆฌ์ฒ๋ผ ์ผ์ชฝ ๋ ธ๋์ ์ค๋ฅธ์ชฝ ๋ ธ๋ ์ฌ์ด์ ํฌ๊ธฐ ์ ํ๋ ์์.
- ( BST๋ ๋ถ๋ชจ ๋ณด๋ค ์์ ๊ฐ์ ์ผ์ชฝ ํฐ ๊ฐ์ ์ค๋ฅธ์ชฝ ๊ท์น์ด ์กด์ฌ, ์ต์ ํ์ ํด๋น ์๋จ. )
- ๋ฃจํธ๊ฐ ๊ฐ์ฅ ์์ ๊ฐ์ ๊ฐ๊ณ ๋ถ๋ชจ๋ ์์๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ง. ( ๋จ์ํ ๋ถ๋ชจ๋ณด๋ค ํฌ๋ฉด ๋จ )
- ์ฆ, ์ต์ํ์ ์์ ์ด์งํธ๋ฆฌ + ์์์ ๋ถ๋ชจ๋ณด๋ค ๋ฌด์กฐ๊ฑด ํฐ๊ฐ ์ด๋ฌํ ๊ท์น์ด ์กด์ฌํ๋ฉฐ, **์์ ๊ฐ์ ์ฐ์ ์์**๋ก ๋ ๋ฐฉ์์.
[ ์ต๋ ํ ]

- ๋ฃจํธ๊ฐ ์ ์ฒด ๋ ธ๋ ์ค์์ ์ต๋๊ฐ์ธ ํ์ ์๋ฏธํ๋ค.
- ์ต์ ํ๊ณผ ๋ฐ๋๋ก, ํธ๋ฆฌ์ ๋ชจ๋ ๋ ธ๋๊ฐ ์์ ๋ ธ๋๋ณด๋ค ํฐ ๊ฐ์ ๊ฐ์ง๋ค.
- ํธ๋ฆฌ์ ๋ ๋ฒจ์ ๋ฐ๋ผ ๋ฐ์ดํฐ๊ฐ ์์๋ฅผ ๊ฐ์ง ์์. ( ์ต์ ํ๊ณผ ๋์ผํจ )
- ํ์ ํธ๋ฆฌ์ฒ๋ผ ์ผ์ชฝ ๋ ธ๋์ ์ค๋ฅธ์ชฝ ๋ ธ๋ ์ฌ์ด์ ํฌ๊ธฐ ์ ํ์ด ๋ฐ๋ก ์์
- ๋ฃจํธ๊ฐ ๊ฐ์ฅ ํฐ ๊ฐ์ ๊ฐ๊ณ ์์์ ๋ถ๋ชจ๋ณด๋ค ์์ ๊ฐ์ ๊ฐ์ ธ์ผ ํ๋ค.
- ์ฆ, ์์ ์ด์งํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๋ฉฐ, **ํฐ ๊ฐ์ ์ฐ์ ์์** ๋ก ๋ ๋ฐฉ์์.
(4) ํ - ํ์ด ์๋ ๊ฒฝ์ฐ

- ์์ ์ด์ง ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์ผ๋ฉด ํ์ด ์๋.
- ์ต์ ํ & ์ต๋ ํ์ ํด๋นํ๋ ๊ตฌ์กฐ์์ ์ฐ์ ์์์ ํด๋นํ๋ ๊ฐ์ด ์ฌ๋ฐ๋ฅธ ์์น์ ์์ผ๋ฉด ํ์ด ์๋.
- ์ฆ, ์ต์ ํ์ ์ฐ์ ์์๊ฐ ์์ ๊ฐ์ด๋ฏ๋ก, ์์ ๊ฐ์ผ๋ก ๋ด๋ ค๊ฐ์ผํจ ( ๋ถ๋ชจ๊ฐ ์์ ๋ณด๋ค ์์์ผ ํจ )
(5) ํ - ํ์ธ ๊ฒฝ์ฐ

- ์ฒซ ๋ฒ์งธ ์ด์ง ํธ๋ฆฌ๋ ์ฐ์ ์์๊ฐ ์ ์ฉ์ด ๋์ด์์ง ์์ผ๋ฏ๋ก, ํ์ด๋ผ๊ณ ๋ณผ ์ ์์.
- ๋ ๋ฒ์งธ ์ด์ง ํธ๋ฆฌ๋ ์์ ์ด์ง ํธ๋ฆฌ ์ด๋ฉด์, ์ต์ ํ์ ๊ตฌํํ ๋ชจ์ต์ผ๋ก ํ์ด๋ผ๊ณ ๋ณผ ์ ์์.
- ์ธ ๋ฒ์จฐ ์ด์ง ํธ๋ฆฌ ๋ํ, ์์ ์ด์ง ํธ๋ฆฌ ๋ชจ์ต์ด๋ฉฐ ์ต์ ํ์ ๊ตฌํํ ๋ชจ์ต์ผ๋ก ํ์.
โ 3. ํ์์ ์ญ์ ๋ฐ ์ฝ์ ์ฐ์ฐ
(1) ๋ฐฐ์ด์ ์ด์ฉํ ํ์ ๊ตฌํ
- ์์ ์ด์ง ํธ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด๋ก ๊ตฌํํด๋ ๊ธฐ์ต์ฅ์ ๋ญ๋น๊ฐ ์์
- ๋ฐฐ์ด์ ์ด์ฉํด์ ํ์ ๊ตฌํํ๋ฉด ์์ ์ด์ง ํธ๋ฆฌ์ด๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด๋ก ๊ตฌํํด๋ ๊ธฐ์ต์ฅ์ ๋ญ๋น๊ฐ ์์.

( ํฌ์ธํฐ๋ฅผ ์ฐ์ง ์๊ณ ์ธ๋ฑ์ค ๋ง์ผ๋ก ๊ณ์ฐํด์ ๊ตฌํ ์ ์์ด์ ์คํ์๋ ๋ฉด์์ ํจ์จ์ ์. )
์์ ์ด์ง ํธ๋ฆฌ ๋ฐฐ์ด : [1, 15, 5, 20, 16, 10, 19, 25, 30 ... ]
index : [0, 1, 2, 3, 4, 5, 6, 7, 8 ... ]
์ผ์ชฝ ์์ ๋
ธ๋: 1(index) * 2 = 2(index)
์ค๋ฅธ์ชฝ ์์ ๋
ธ๋ : 1(index) * 2 + 1 = 3(index)
** ์์ ์ด์งํธ๋ฆฌ๋ 2์ ๋ฐฐ์์ฉ ์ปค์ง๋ ๊ฒฝํฅ์ด ์์.**
- ์ฆ, ์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ์ด๋ผ, ๋ฐฐ์ด์ ๋ญ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ ์ ์ด ์กด์ฌํ์ง ์๋๋ค๋ ์๋ฏธ์.
- ๋ํ, ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๋ณด๋ค ์คํ ์๋ ๋ฉด์์ ํจ์จ์ ์.
- ์ด์ ๋, ํฌ์ธํฐ๋ฅผ ๋ฐ๋ผ์ ์ด๋ํ๋๊ฒ์ด ์๋๋ผ, ์ธ๋ฑ์ค ๊ณ์ฐ์ ํตํด ์์์ ๊ฐ์ ์ถ์ถํ๊ธฐ ๋๋ฌธ์.
- ์ฆ, ํ์ ์์ ๊ฐ์ ์ฅ์ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก๋ ๋ฐฐ์ด๋ก ๊ตฌํ์ ํ๊ฒ ๋จ.
(2) ํ - ๋ฃจํธ ๋ ธ๋ ์ญ์

- ํ์ Queue ์๋ฃ๊ตฌ์กฐ์ ๊ท์น์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฐ๋์ ๋ฃจํธ์์ ์ญ์ ๊ฐ ๋์ด์ผ ํจ.
- ๋ค๋ฅธ B-Tree ๋ ์ฌ๋ฌ Tree ๊ตฌ์กฐ๋ ์ค๊ฐ์์ ์ญ์ ๊ฐ ๋์ง๋ง, Queue ๋ฅผ ๊ตฌํํ๊ธฐ ์ํ ํ์ด๊ธฐ ๋๋ฌธ์.


[ ๊ตฌ์กฐ์ฒด ๋ฐ ํจ์ ์ ์ธ๋ถ ]

- (1) typedef struct heap: ํ์ ํํํ๊ธฐ ์ํ ๊ตฌ์กฐ์ฒด ์ ์์ด๋ฉฐ, MAX_SIZE ๋ ํ์ ์์๋ค์ ์ ์ฅํ ๋ฐฐ์ด์ด๋ค. ๋ํ, size ํ๋๋ ํ์ ํ์ฌ ์ ์ฅ๋ ์์์ ๊ฐ์๋ฅผ ์๋ฏธํ๋ค.
- (2) child, parent ๋ณ์: ํ์ ์ฌ์ ๋ ฌ ํ ๋ ์ฌ์ฉํ๋ ๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋์ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅํ ๋ณ์์ด๋ฉฐ, 1๊ณผ 2๋ก ์ด๊ธฐํ
- (3) data = h -> heap[1]: ํด๋น ๋ณ์์๋ ํ์ฌ h -> heap[1] ์ฆ, ๋ฐฐ์ด์ ์ธ๋ฑ์ค ์ ์ผ ์ฒซ ๋ฒ์งธ ์์๊ฐ ๋ค์ด๊ฐ๊ฒ ๋จ.
- (4) temp = h -> heap[(h -> size)--]: ํด๋น ๋ณ์์๋ ํ์ฌ ๋ฐฐ์ด์ size ๋ฅผ ๋ฃ๊ฒ ๋๋๋ฐ, ๊ฒฐ๊ตญ ๋ง์ง๋ง ์์๋ฅผ ๋ฃ๋๊ฒ์.
- ์ ๋ฆฌํ๋ฉด, ํ์ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค์ ๋์ ์ธ๋ฑ์ค๋ฅผ ๊ตฌํด์ ์ด๊ธฐํ๋ฅผ ํด์ฃผ๋ ๋ก์ง์. ( ์ฆ, ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ์ ๋ index )
[ ์ญ์ ๋ฐ ์ฌ์ ๋ ฌ ๋ก์ง ]
- (1) while(child <= h -> size): child ์ธ๋ฑ์ค๊ฐ ํ์ ์ค์ ํฌ๊ธฐ์ธ h -> size ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋์, ์ฆ ๋น๊ตํ ์์ ๋ ธ๋๊ฐ ํ๋๋ผ๋ ์๋ ๋์ ๋ฃจํ๋ฅผ ๋ฐ๋ณตํจ.
- (2) child < h -> size: ํด๋น ์กฐ๊ฑด์ ์ค๋ฅธ์ชฝ ์์(child+1) ์ด ์กด์ฌํ๋์ง ํ์ธ์ ํจ.( ์ผ์ชฝ ์์๋ง ์์ ์๋ ์์ผ๋๊น )
(3) h -> heap[child] > h -> heap[child+1]) { child++; }:

- ํ์ฌ ํ ๋ฐฐ์ด์์ ์ผ์ชฝ ์์ & ์ค๋ฅธ์ชฝ ์์ ๋น๊ต๋ฅผ ํ๊ณ ์ผ์ชฝ ์์์ด ์ค๋ฅธ์ชฝ ์์๋ณด๋ค ํด ๊ฒฝ์ฐ child++ ๋ฅผ ํด์ค.
- ํ์ฌ 15 > 5 ๋ฅผ ๋น๊ตํ๊ฒ ๋๋ฏ๋ก, true ์ฆ, child++; ๋ฅผ ํ๊ฒ ๋จ. child == 3 ์ด ๋ ์ํ์.
(4) if(temp <= h->heap[child]) break
temp = heap[lastIndex]; -> temp -> 23
temp <= heap[child]; -> 23 <= 3 [false]
break; -> ๋ง์ง๋ง ์ธ๋ฑ์ค temp ๊ฐ ํ์ฌ heap[child] ์ธ ์์์ด๋ ๊ฐ๊ฑฐ๋ ์์ ๊ฒฝ์ฐ ๋ฐ๋ณต๋ฌธ ํ์ถํจ.

- ํ์ฌ temp ๋ 23 ์ด๊ณ heap[child] ๋ 5์ด๋ค. 23 <= 5 ์ด๋ฏ๋ก, false ์ฆ, break; ๋ฌธ์ ์ํํ์ง ์์.
- ๋ํ, heap[parent] = heap[child] ๋ฅผ ํตํด์
- parent ๋ 1์ด๊ณ , heap[parent] ๋ ๊ฒฐ๊ตญ heap[1] ๋ฃจํธ๋ฅผ ์๋ฏธํ๋ค. ์ฌ๊ธฐ์ heap[parent] = heap[child] ๋ฅผ ํ๊ฒ ๋๋ฉด ๋ฃจํธ ๋ ธ๋์ child ์ ๊ฐ์ ๋ฃ๊ฒ ๋๋ ๊ฒ์ด๋ค. ์ฆ, ๋ฃจํธ์๋ ์์ ๊ฐ์ด 5๊ฐ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
- ์ต์ข ์ ์ผ๋ก, parent = child ๊ฐ์ ๋ฃ์์ผ๋ก์จ, ๋ค์ ๋ฐ๋ณต๋ฌธ ๋ parent ๋ 3 index ๋ฅผ ๊ฐ์ง๊ณ ์์ํ๋ ๊ฒ์.
- ๋ง์ง๋ง์ผ๋ก child *= 2; ๋ฅผ ํจ์ผ๋ก์จ, child ์ ๊ฐ์ 6์ผ๋ก ์ฌ๋ฆฌ๊ฒ ๋๋ฉฐ, child ์ธ๋ฑ์ค๋ 10์ด ๋จ.
- ๊ฒฐ๊ตญ ์ด๋ฌํ ๊ณผ์ ์ ๋ฐ๋ณต๋ฌธ์ ํตํด์ size ๋งํผ ๊ณ์ ๋๋ฆฌ๊ฒ ๋จ.
- (8) h->heap[parent] = temp: ๋ฃจํ๊ฐ ๋๋ parent ์์น๊ฐ temp ๊ฐ์ด ์ต์ข ์ ์ผ๋ก ์๋ฆฌ ์ก์ ๊ณณ์. ์ฌ๊ธฐ์ temp ๊ฐ์ ๋ฃ์.
- (9) return data: ๊ฐ์ฅ ์ฒ์์ ์ ์ฅํด๋์๋ ํ์ ์๋ ์ต์๊ฐ(data)์ ๋ฐํ
[ ์ญ์ ์ฐ์ฐ ์์ ]
1
/ \
10 2
/ \
20 30
- ์ต์ํ์ ์์๋ก ๋ค๋ฉด, ๋งจ ์์ ๋ฃจํธ ๋ ธ๋๋ฅผ ์ญ์ ํ๋ฉด์ ๋ฐํ์ ํ๊ฒ ๋จ.
30
/ \
10 2
/
20
- ์ดํ, ์์ ์ด์ง ํธ๋ฆฌ์ ๋ฐฐ์ด ๋ง์ง๋ง ๋ถ๋ถ์ธ 30์ ๋ฃจํธ๋ก ์ฌ๋ฆฌ๊ฒ ๋จ.
- ์ด๋ ๋ง์ง๋ง ์ธ๋ฑ์ค ๋ถ๋ถ์ ๋ ธ๋๋ ์ฝ์ ๋ ์ด๋ฏธ ์ต์ํ ๊ธฐ์ค์ผ๋ก ์ฝ์ ์ด ๋์ด์ ๋ค์ด๊ฐ๊ฑฐ๋ผ ๋ถ๋ชจ๋ณด๋ค ํผ.
- ์ดํ, ๋ฃจํธ ๋ ธ๋์ ์๋ ์์ ๋ ธ๋ 10, 2 ์ ๋น๊ต ํ ์ต์ํ์ด๋ฏ๋ก ๋ ์์ ์์๊ณผ ์๋ฆฌ๋ฅผ ๋ฐ๊พธ๊ฒ ๋จ.
2
/ \
10 30
/
20
- ๊ทธ๋ฌ๋ฉด, ์์ ๊ฐ์ ๊ตฌ์กฐ๊ฐ ๋๊ฒ ๋๋ฉฐ, 2 < 10, 2 < 30 ์ด๋ฏ๋ก ๋ ์ด์ ๋ด๋ ค๊ฐ ํ์๊ฐ ์์ด์ง. ( ์ต์ข ๊ฒฐ๊ณผ )
[ ์ญ์ ์ฐ์ฐ ์ ๋ฆฌ ]
- (1) ๊ฐ์ฅ ์์ ๊ฐ(๋ฃจํธ)์ ์ผ๋จ ๋ค๋ฅธ ๊ณณ์ ๋ฐฑ์ ์ ๋ฏธ๋ฆฌ ํด๋ (ํด๋น ๊ฐ์ ๋ฐํํด์ค์ผ ํ๋ฏ๋ก ์ต์ข ์ ์ผ๋ก ๋ณ์์ ๋ด์ ๋ฐํํจ.)
- (2) ํ์ ๊ฐ์ฅ ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๋ฃจํธ ์๋ฆฌ(1๋ฒ ์ธ๋ฑ์ค)๋ก ๊ฐ์ ๋ก ๊ฐ์ ธ์ด.
- (3) ํ์ ์ ์ฒด ํฌ๊ธฐ๋ฅผ 1 ์ค์.
- (4) ๋ฃจํธ ์๋ฆฌ๋ก ์จ ์ ๋ ธ๋๋ ํ์ ๋ค๋ฅธ ๊ฐ๋ค๋ณด๋ค ํด ํ๋ฅ ์ด ๋์. (์ต์ ํ ๊ท์น ์๋ฐ)
- (5) ์ด ๋ ธ๋๋ฅผ ์์ ์ ์์ ๋ ธ๋๋ค๊ณผ ๋น๊ตํ๋ฉฐ ์๋๋ก ๋ด๋ ค๋ณด๋ด๊ฒ ๋จ.
- (6) **๋ ์์ ์ค ๋ ์์ ๊ฐ**๊ณผ ์์ ์ ๋น๊ตํด์, ์์ ์ด ๋ ํฌ๋ฉด ์๋ฆฌ๋ฅผ ๋ฐ๊ฟ.
- (7) ์ ์๋ฆฌ(์์๋ค๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์์ง๋ ์์น)๋ฅผ ์ฐพ๊ฑฐ๋, ํ์ ๋งจ ๋(๋ฆฌํ ๋ ธ๋)์ ๋๋ฌํ ๋๊น์ง ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๊ฒ ๋จ.
(3) ํ - ๋ ธ๋ ์ฝ์ ์ฐ์ฐ

- ํด๋น ์ฝ๋๋ ์ต์ ํ์ ์๋ก์ด ์์๋ฅผ ์ฝ์ ํ๋ ํจ์ ์ฝ๋์ด๋ค.
- ๋์ ์๋ฆฌ๋ ์ ๋ฐ์ดํฐ๋ฅผ ํ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ์ถ๊ฐํ ๋ค, ๋ถ๋ชจ ๋ ธ๋์ ๋น๊ตํ์ฌ ์ ์๋ฆฌ๋ฅผ ์ฐพ์ ์ฌ๋ผ๊ฐ๋ ๋ฐฉ์์.
- (1) ์ ๋ฐ์ดํฐ๋ฅผ ํ์ ๊ฐ์ฅ ๋ง์ง๋ง ์์น(๋ฐฐ์ด์ ๋งจ ๋)์ ์ผ๋จ ์ฝ์ ์ ํจ.
- (2) ์ฝ์ ๋ ๋ ธ๋๊ฐ ์์ ์ ๋ถ๋ชจ ๋ ธ๋๋ณด๋ค ์๋ค๋ฉด, ์ต์ ํ์ ๊ท์น์ ์ด๊ธฐ๊ฒ ๋จ.
- (3) ์ด๋, ๋ถ๋ชจ ๋ ธ๋์ ์๋ฆฌ๋ฅผ ๋ฐ๊พธ๊ฒ ๋จ.
- (4) ์ ๋ฐ์ดํฐ๊ฐ ์ ์๋ฆฌ(๋ถ๋ชจ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์์ง๋ ์์น)๋ฅผ ์ฐพ๊ฑฐ๋, ํ์ ๋ฃจํธ(๊ผญ๋๊ธฐ)์ ๋๋ฌํ ๋๊น์ง ์ด ๊ณผ์ ์ ๋ฐ๋ณตํจ.
- ์ฝ์ ํ๋ ์ฐ์ฐ์ ์๋์์ ์๋ก ์ฌ๋ผ๊ฐ๋ ๊ณผ์ ์ด๋ผ "up-heapify" ์ผ๋ก ๋ถ๋ฅด๋ฉฐ, ๋ฐ๋๋ก ์ญ์ ํ๋ ๊ณผ์ ์ ์์์ ์๋๋ก ์ ์๋ฆฌ๋ฅผ ์ฐพ์ ๋ด๋ ค๊ฐ๋ ๊ณผ์ ์ผ๋ก "down-heapify" ์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- ๊ฒฐ๋ก ์, ์ฝ์ ์ฐ์ฐ์ ๋ง์ง๋ง ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๊ณ ๋น๊ต๋ฅผ ํ๋ฉด์ ์ ์๋ฆฌ๋ฅผ ์ฐพ์๊ฐ๋ ์๋ฆฌ์.
[ ์ฝ์ ์ฐ์ฐ ์์ ]
2
/ \
10 30
/
20
- ์์ ๊ฐ์ด ๊ธฐ์กด ์ต์ํ์ด ์กด์ฌํ๊ณ , ์ ๊ฐ์ผ๋ก "1" ์ ์ถ๊ฐํ๋ค๊ณ ๊ฐ์ ์ ํ๊ฒ ์.
2
/ \
10 30
/ \
20 1
- ์ ๊ฐ "1" ์ ๋จผ์ ๋ฐฐ์ด์ ์ธ๋ฑ์ค ๋งจ ๋ง์ง๋ง์ ์ถ๊ฐ๊ฐ ๋๊ฒ ๋จ.
- ์์ ์ด์งํธ๋ฆฌ ๊ท์น์ ์งํค๊ธฐ ์ํด์ ๊ฐ์ฅ ๋ง์ง๋ง ์์น์ ์ฝ์ ์ด ๋๋ ๊ฒ์.
2
/ \
1 30
/ \
20 10
- ์ดํ, ๋ถ๋ชจ์ ๋น๊ตํ๋ฉฐ ์๋ก ์ฌ๋ผ๊ฐ๊ฒ ๋จ. ( ์ต์ํ ์กฐ๊ฑด : ๋ถ๋ชจ๋ณด๋ค ์์ผ๋ฉด ์ฌ๋ผ๊ฐ )
- ์ฆ, ์ ๋ ธ๋ 1์ ๋ถ๋ชจ๋ 10์ด๊ณ ์ต์ํ ์กฐ๊ฑด์ผ๋ก 1 < 10 true ์ด๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ๋จ.
1
/ \
2 30
/ \
20 10
์ต์ข
๋ฐฐ์ด: [1, 2, 30, 20, 10]
- ๋ถ๋ชจ ๋ ธ๋์ธ ๋ฃจํธ ๋ ธ๋ ๋ณด๋ค๋ ์๊ธฐ ๋๋ฌธ์ ์ถ๊ฐ ๋ "1" ์ ๊ฒฐ๊ตญ ๋ฃจํธ ๋ ธ๋๋ก ์ฌ๋ผ๊ฐ๊ฒ ๋จ. ( up-heapify )
- ์ฆ, ์๋ก์ด ๋ ธ๋๋ฅผ ์ถ๊ฐํ ์ ์์๊ฐ์ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด์ ์ถ๊ฐ ๋ ์ซ์๊ฐ ์ฌ๋ผ๊ฐ๊ฒ ๋จ.up-heapify
- ๋ฃจํธ๊น์ง ์ฌ๋ผ๊ฐ๊ฑฐ๋ ์ถ๊ฐ ๋ ๋ฐ์ดํฐ์ ๋ถ๋ชจ ๋ ธ๋ ๋ฐ์ดํฐ๊ฐ ๋ ์์ ๋ ๊น์ง ๋ฐ๋ณตํ๊ฒ ๋จ.
'๐๋ฐฉ์กํต์ ๋ํ๊ต > ๐ข์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์๋ฃ๊ตฌ์กฐ] 8๊ฐ - ์ค๋ ๋ํธ๋ฆฌ (0) | 2025.10.23 |
|---|---|
| [์๋ฃ๊ตฌ์กฐ] 7๊ฐ - ํธ๋ฆฌ (0) | 2025.10.14 |
| [์๋ฃ๊ตฌ์กฐ] 6๊ฐ - ์ฐ๊ฒฐ ๋ฆฌ์คํธ์ ์์ฉ (0) | 2025.10.06 |
| [์๋ฃ๊ตฌ์กฐ] 5๊ฐ - ์ฐ๊ฒฐ ๋ฆฌ์คํธ (0) | 2025.09.04 |
| [์๋ฃ๊ตฌ์กฐ] 4๊ฐ - ํ (0) | 2025.09.02 |