๋ฐ์ํ
3. ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ
3.1 ์๋ฃ๊ตฌ์กฐ(Data Structure)
์ ์
- ์๋ฃ๋ฅผ ์ปดํจํฐ์ ๊ธฐ์ต์ฅ์น ๋ด์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ => ์๋ฃ์ ํน์ฑ๊ณผ ์ฌ์ฉ ์ฉ๋๋ฅผ ๊ณ ๋ คํ์ฌ ์กฐ์ง์ , ์ฒด๊ณ์ ์ผ๋ก ์ ๋ฆฌ
๋ถ๋ฅ
- ์ ํ๊ตฌ์กฐ์ ๋น์ ํ๊ตฌ์กฐ
- ์ ํ๊ตฌ์กฐ : ์๋ฃ๊ฐ ์ผ๋ ฌ๋ก ์ฐ๊ฒฐ๋์ด ์๋ ํํ ex) ๋ฐฐ์ด, ์ ํ๋ฆฌ์คํธ, ์คํ, ํ, ๋ฐํฌ ๋ฑ
- ๋น์ ํ๊ตฌ์กฐ : ์๋ฃ์ ๊ตฌ์ฑ์ด ๊ณ์ธต๊ตฌ์กฐ๋ ๋ง๊ตฌ์กฐ์ ํน๋ณํ ํํ ex) ํธ๋ฆฌ, ๊ทธ๋ํ ๋ฑ
์คํ๊ณผ ํ
- ์คํ
- ๋ฐ์ดํฐ๊ฐ ์ ๋ ฅ๋ ์์๋ก ๊ธฐ์ต๊ณต๊ฐ์ ์ ์ฅ๋์ด ์ถ๋ ฅ ์ ํ์ ์ ์ถ ๋๋ ์๋ฃ๊ตฌ์กฐ
- ์คํ ์ฐ์ฐ
- top() : ์คํ์ ๋งจ ์์ ์๋ ๋ฐ์ดํฐ ๊ฐ ๋ฐํ
- push() : ์คํ์ ๋ฐ์ดํฐ ์ฝ์
- pop() : ์คํ์์ ๋ฐ์ดํฐ ์ญ์ ํ ๋ฐํ
- isempty() : ์คํ์ ์์๊ฐ ์์ผ๋ฉด true, ์์ผ๋ฉด false ๋ฐํ
- isfull() : ์คํ์ ์์๊ฐ ์์ผ๋ฉด false, ์์ผ๋ฉด true ๋ฐํ
- ํ
- ๋ค์์ ๋ฐ์ดํฐ๊ฐ ์ฝ์ ๋๊ณ , ์์์๋ ์ญ์ ๋ง ํ ์ ์๋ ์ ์ ์ ์ถ์ ์๋ฃ๊ตฌ์กฐ
- ํ ์ฐ์ฐ
- enQueue : ํ์ ๋ฐ์ดํฐ ์ฝ์
- deQueue : ํ์ ๋ฐ์ดํฐ ์ญ์
ํธ๋ฆฌ์ ๊ทธ๋ํ
- ํธ๋ฆฌ
- ์์๋ค ๊ฐ์ ๊ณ์ธต ๊ด๊ณ๋ฅผ ๊ฐ์ง๋ ๊ณ์ธตํ ์๋ฃ ๊ตฌ์กฐ => ํ์ ์์๋ก ๋ด๋ ค๊ฐ๋ฉฐ ํ์ฅ๋๋ ๋๋ฌด ๋ชจ์ ๊ตฌ์กฐ
- ํธ๋ฆฌ ์์ ๋ ธ๋ : ๋ฃจํธ ๋ ธ๋ (root node)
- ๋ ธ๋ ์ฐ๊ฒฐํ๋ ์ : ๊ฐ์ (edge)
- ๊ฐ์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ฐ์ง ์์ ๋ ธ๋ : ํ์ ๋ ธ๋ (sibling node)
- ์์์ด ์๋ ๋ ธ๋ : ๋จ๋ง ๋ ธ๋ (leaf node)
- ๋ถ๋ชจ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ ๋์์ ๋ ์๊ธฐ๋ ํธ๋ฆฌ : ์๋ธ ํธ๋ฆฌ (subtree)
- ๊ทธ๋ํ
- ์ฐ๊ฒฐ๋์ด ์๋ ์์ ์ฌ์ด์ ๊ด๊ผ๋ฅผ ํํํ๋ ์๋ฃ ๊ตฌ์กฐ
- ๊ฐ์ฒด๋ฅผ ๋ํ๋ด๋ ์ ์ (vertex)์ ๊ฐ์ฒด๋ฅผ ์ฐ๊ฒฐํ๋ ๊ฐ์ (edge)์ ์งํฉ
- ๊ทธ๋ํ ์ข ๋ฅ : ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ(๋ฐฉํฅ์ฑ ์๋ ์ ์ผ๋ก ์ฐ๊ฒฐ๋ ๊ทธ๋ํ), ๋ฐฉํฅ ๊ทธ๋ํ(๋ฐฉํฅ์ฑ์ ์ง๋๋ ๊ทธ๋ํ๋ก์ ์์ ์ค์), ์์ ๊ทธ๋ํ(์๋ก ๋ค๋ฅธ ์ ์ ์ ์ฐ๊ฒฐํ์ฌ ์ต๋๋ก ๋ง์ ๊ฐ์ ์๋ฅผ ๊ฐ์ง ๊ทธ๋ํ), ๊ฐ์ค ๊ทธ๋ํ(์ ์ ์ ์ฐ๊ฒฐํ๋ ๊ฐ์ ์ ๊ฐ์ค์น ํ ๋นํ ๊ทธ๋ํ)
- ๊ทธ๋ํ ๊ตฌํ ๋ฐฉ๋ฒ
- ์ธ์ ํ๋ ฌ : 2์ฐจ์ ๋ฐฐ์ด ์ฌ์ฉ
- ์ธ์ ๋ฆฌ์คํธ : ์ฐ๊ฒฐ ์๋ฃ๊ตฌ์กฐ ์ด์ฉํ์ฌ ์ธ์ ์ ์ ๋ค์ ์ฐ๊ฒฐํ๋ ํํ ๋ฐฉ๋ฒ
1.2 ์๊ณ ๋ฆฌ์ฆ
์๊ณ ๋ฆฌ์ฆ ๊ฐ์
- ์๊ณ ๋ฆฌ์ฆ ์ ์ : ์ฃผ์ด์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ์ผ๋ จ์ ์ฒ๋ฆฌ ์ ์ฐจ๋ฅผ ๋จ๊ณ์ ์ผ๋ก ๊ธฐ์ ํ ๊ฒ => ๋ฌธ์ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ถ์ํํ์ฌ ๋จ๊ณ์ฉ ์ ์ฐจ๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ๊ธฐ์ ํด ๋์ ๋ช ์ธ์
- ์๊ณ ๋ฆฌ์ฆ์ ์กฐ๊ฑด : ์ ๋ ฅ, ์ถ๋ ฅ, ๋ช ํ์ฑ, ์ ํ์ฑ, ํจ๊ณผ์ฑ์ด ์์ด์ผ ํจ
์๊ณ ๋ฆฌ์ฆ ๋ถ์ ๊ธฐ์ค
- ์ ํ์ฑ : ํ๋นํ ์ ๋ ฅ์ ๋ํด ์ ํ ์๊ฐ ๋ด์ ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ฐ์ถํ๋์ง ํ๋จ
- ์์ ๋ : ์๊ณ ๋ฆฌ์ฆ์ ์ํ์ ํ์๋ ์ธก์
- ๊ธฐ์ต ์ฅ์ ์ฌ์ฉ๋ : ๋ฐ์ดํฐ ์ ๋ณด ๋ฑ์ ์ ์ฅํ๊ธฐ ์ํ ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉ๋
- ์ต์ ์ฑ : ์๊ณ ๋ฆฌ์ฆ ์ ์ฉํ ์์คํ ์ ์ฌ์ฉ ํ๊ฒฝ ๊ณ ๋ คํ ๋ ์ ํฉํ ์๊ณ ๋ฆฌ์ฆ์ธ์ง ํ๋จ
- ๋จ์์ฑ : ์๊ณ ๋ฆฌ์ฆ ํํ์ด ์ผ๋ง๋ ์ดํดํ๊ธฐ ์ฝ๊ฒ ๋ช ํํ๊ฒ ์์ฑ๋์๋์ง ํ๋จ
์๊ณ ๋ฆฌ์ฆ ํํ ๋ฐฉ๋ฒ
- ์์ฐ์ด ๊ธฐ์ : ์ผ์์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ง์ด๋ ๊ธ์ ์ด์ฉํ์ฌ ํํํ๋ ๋ฐฉ๋ฒ
- ์์๋ ํํ : ์์๋๋ NS ์ฐจํธ์ ๊ฐ์ ๊ทธ๋ํฝ์ ์ธ ๋ฐฉ๋ฒ
- ์์ฌ์ฝ๋ (Pseudo Code) : ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์ ์ฌํ ํํ๋ก ์์ฑํ ์ฝ๋๋ก ํํ
์๊ณ ๋ฆฌ์ฆ ์ฑ๋ฅ ๋ถ์
- ๊ณต๊ฐ ๋ณต์ก๋ : ์๊ณ ๋ฆฌ์ฆ์ ํ๋ก๊ทธ๋จ์ผ๋ก ์คํํ์ฌ ์๋ฃํ๊ธฐ๊น์ง ํ์ํ ์ด ์ ์ฅ ๊ณต๊ฐ => ๊ณต๊ฐ ๋ณต์ก๋ = ๊ณ ์ ๊ณต๊ฐ๋ + ๊ฐ๋ณ ๊ณต๊ฐ๋
- ๊ณ ์ ๊ณต๊ฐ๋ : ํ๋ก๊ทธ๋จ์ ํฌ๊ธฐ๋ ์ ์ถ๋ ฅ ํ์์ ์๊ด ์์ด ๊ณ ์ ์ ์ผ๋ก ํ์ํ ์ ์ฅ ๊ณต๊ฐ
- ๊ฐ๋ณ ๊ณต๊ฐ๋ : ํ๋ก๊ทธ๋จ ์ํ๊ณผ์ ์์ ์ฌ์ฉํ๋ ์๋ฃ์ ๋ณ์๋ค์ ์ ์ฅํ๋ ๊ณต๊ฐ๊ณผ ํจ์ ์คํ ์ ๋ณด ์ ์ฅ ๊ณต๊ฐ
- ์๊ฐ ๋ณต์ก๋ : ์๊ณ ๋ฆฌ์ฆ์ ํ๋ก๊ทธ๋จ์ผ๋ก ์คํํ์ฌ ์๋ฃํ๊ธฐ๊น์ง ๊ฑธ๋ฆฌ๋ ์๊ฐ => ์๊ฐ ๋ณต์ก๋ = ์ปดํ์ผ์๊ฐ + ์คํ์๊ฐ
- ์ปดํ์ผ ์๊ฐ : ๊ณ ์ ์ ์ธ ์๊ฐ, ํ๋ก๊ทธ๋จ ์์ ์ด ์ผ์ด๋์ง ์๋ ํ ์ผ์ ํ๊ฒ ์ ์ง
- ์คํ์๊ฐ : ํ๋ก๊ทธ๋จ์ ์คํ ์๊ฐ, ๋ช ๋ น๋ฌธ์ ์คํ ๋น๋์๋ฅผ ๊ตฌํด์ ๊ณ์ฐ
- ์๊ฐ ๋ณต์ก๋๋ฅผ ๋ํ๋ผ ๋๋ ๋น -์ค(Big Oh) ํ๊ธฐ๋ฒ ์ฌ์ฉ
์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- ์ ๋ ฌ ๋ถ๋ฅ : ๋ด๋ถ์ ๋ ฌ(์๋์ ๋ฐ์ดํฐ์ ๋ํด ์ฃผ๊ธฐ์ต ์ฅ์น์ ์ฌ๋ ค์ ์ ๋ ฌ ๋ฐฉ์)๊ณผ ์ธ๋ถ์ ๋ ฌ(๋๋์ ๋ฐ์ดํฐ์ ๋ํด ๋ณด์กฐ ๊ธฐ์ต ์ฅ์น์์ ์ ๋ ฌ ๋ฐฉ์)
- ๋ด๋ถ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- ์ฝ์ ์ ๋ ฌ : ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์๋ค๊ณ ๊ฐ์ ํ๊ณ ๊ฐ์ ํด๋น ์์น์ ์ฝ์ ํ์ฌ ์ ๋ ฌ
- ์์ ๋ ฌ : ์ฃผ์ด์ง ์๋ฃ ๋ฆฌ์คํธ๋ฅผ ํน์ ๋งค๊ฐ๋ณ์ ๊ฐ์ ๊ธธ์ด๋ฅผ ๊ฐ๋ ๋ถํ์ผ๋ก ์ชผ๊ฐ์, ๊ฐ ๋ถํ์ผ์์ ์ฝ์ ์ ๋ ฌ์ ์ํ
- ์ ํ์ ๋ ฌ : ์ต์๊ฐ์ ์ฐพ์ ์ผ์ชฝ์ผ๋ก ์ด๋์ํค๋๋ฐ ๋ฐ์ดํฐ ํฌ๊ธฐ(๊ฐ์)๋งํผ ๋ฐ๋ณตํ์ฌ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ
- ํต์ ๋ ฌ : ์์ ๊ธฐ์ค ์ ํ ํ ๊ธฐ์ค๋ณด๋ค ์์ผ๋ฉด ์ผ์ชฝ, ํฌ๋ฉด ์ค๋ฅธ์ชฝ์ผ๋ก ์์น ํ๋ ๊ฒ์ ๋ฐ๋ณตํ์ฌ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ
- ๋ฒ๋ธ์ ๋ ฌ : ์ธ์ ํ ๋ฐ์ดํฐ ๊ฐ์ ๊ตํ์ด ๊ณ์ํด์ ์ผ์ด๋๋ฉด์ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ
- ํ์ ๋ ฌ : ์ต๋ ํ ํธ๋ฆฌ๋ ์ต์ ํ ํธ๋ฆฌ ๊ตฌ์ฑํด ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ
- ๋จธ์ง์ ๋ ฌ : ๋ฐ์ดํฐ ํฌ๊ธฐ๋ฅผ ๋ฐ์ผ๋ก ๊ณ์ ๋๋๋ฉด์ ์ ๋ ฌํด์ ํฉ์น๋ ๋ฐฉ๋ฒ
- ๊ธฐ์์ ๋ ฌ : ๋ฐ์ดํฐ์ ๋ฎ์ ์๋ฆฌ ์๋ถํฐ ๋น๊ตํ์ฌ ์ ๋ ฌํ๋ ๋ฐฉ๋ฒ
๊ฒ์ ์๊ณ ๋ฆฌ์ฆ
- ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ : ๋ฐ์ดํฐ ์งํฉ์์ ์ํ๋ ํญ๋ชฉ์ ํจ์จ์ ์ผ๋ก ์ฐพ๋ ๊ธฐ๋ฒ
- ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ์ ๋ถ๋ฅ
- ์ ํ ๊ฒ์
- ์ ํ ํ์ : ์ฒ์๋ถํฐ ๋ง์ง๋ง๊น์ง ์์๋๋ก ๊ฐ ๋ ์ฝ๋๋ฅผ ๋น๊ตํ๋ฉด์ ์ฐพ์๊ฐ๋ ๋ฐฉ๋ฒ
- ์ ์ด ๊ฒ์
- ์ด์ง ํ์ : ์ํ๊ฐ๊ณผ ํํ๊ฐ์ ์ค์ ํ๊ณ ๊ทธ ์ค๊ฐ๊ฐ์ ๊ตฌํ ํ ํค์ ์ค๊ฐ๊ฐ์ ๊ณ์ ๋น๊ตํ๋ฉด์ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ
- ํผ๋ณด๋์น ํ์ : ํผ๋ณด๋์น ์์ด์ ์ด์ฉํ์ฌ ์๋ธ ํ์ผ์ ํ์ฑํด ๊ฐ๋ฉด์ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ
- ๋ณด๊ฐ ํ์ : ํ์ ๋์์ด ์์ ๊ฒ์ผ๋ก ์์๋์ด์ง๋ ์์น๋ฅผ ์ ํํ์ฌ ์ฐพ์๊ฐ๋ ๋ฐฉ์์ผ๋ก ์ดํ ๊ทธ ์์น์์ธ ์ ํ ํ์
- ๋ธ๋ก ํ์ : ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ๊ฐ์์ ๋ธ๋ก์ผ๋ก ๊ตฌ๋ถํ๊ณ ์ฐพ๊ธฐ๋ฅผ ์ํ๋ ๋ฐ์ดํฐ๊ฐ ์ํ ๋ธ๋ก์ ๊ฒฐ์ ํ ํ์ ํด๋น ๋ธ๋ก ๋ด์ ํค ๊ฐ์ ์์ฐจ์ ์ผ๋ก ๊ฒ์ํ๋ ๋ฐฉ๋ฒ
- ์ด์งํธ๋ฆฌ ํ์ : ์ด์ง ํธ๋ฆฌ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ ๋ฐฉ๋ฒ
- ํน์ ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ ๊ทผํ๋ ๋ฐฉ์
- ํด์ฑ : ํด์ฑ ํจ์๋ฅผ ์ด์ฉํ์ฌ ์ ์ฅ๋์ด ์๋ ์ฃผ์๋ฅผ ์ง์ ๊ณ์ฐํ์ฌ ์ฐพ์๊ฐ๋ ๊ฒ์ ๋ฐฉ๋ฒ
- ์ ํ ๊ฒ์
๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ
- ๊ทธ๋ํ ํ์ : ํ๋์ ์ ์ ์์ ์์ํ์ฌ ๊ทธ๋ํ์ ์๋ ๋ชจ๋ ์ ์ ์ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํ์ฌ ์ฒ๋ฆฌํ๋ ์ฐ์ฐ
- ๊น์ด ์ฐ์ ํ์(DFS) : ์์ ์ ์ ์์ ํ ๋ฐฉํฅ์ผ๋ก ๊น์ด ํ์ํ๋ค๊ฐ ๋ ์ด์ ๊ฐ ๊ณณ์ด ์์ผ๋ฉด ๋ง์ง๋ง ๊ฐ๋ฆผ์ ๊ฐ์ ์ผ๋ก ๋๋์์ ๋ค๋ฅธ ๋ฐฉํฅ์ ๊ฐ์ ์ผ๋ก ํ์ ๋ฐ๋ณต
- ๋๋น ์ฐ์ ํ์(BFS) : ์์ ์ ์ ์ผ๋ก๋ถํฐ ๊ฐ๊น์ด ์ ์ ์ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ ๋ฉ๋ฆฌ ๋จ์ด์ ธ ์๋ ์ ์ ์ ๋์ค์ ๋ฐฉ๋ฌธํ๋ ํ์ ๋ฐฉ๋ฒ
์ต์ ์ ์ฅ ํธ๋ฆฌ(MST)
- ์ต์ ์ ์ฅ ํธ๋ฆฌ : ์ ์ฅ ํธ๋ฆฌ(๋ฌด๋ฐฉํฅ ๊ฐ์ค์น ๊ทธ๋ํ ๋ด ๋ชจ๋ ์ ์ ์ ํฌํจํ๊ณ ์๋ก ์ฐ๊ฒฐ๋์ด ์๋ ํธ๋ฆฌ์ ํน์ํ ํํ๋ก ์ฌ์ดํด์ ํฌํจํด์๋ ์๋๋ ํธ๋ฆฌ)๋ ๊ตฌ์ฑํ๋ ๊ฐ์ค์น์ ํฉ์ด ์ต์์ธ ํธ๋ฆฌ
- ํฌ๋ฃจ์ค์นผ ์๊ณ ๋ฆฌ์ฆ : ์ ์ ์ ์ฐ๊ฒฐ๋ ๊ฐ์ ๊ฐ์ด๋ฐ ๊ฐ์ค์น๊ฐ ์ต์์ธ ๊ฐ์ ์ ์ ํํ๊ณ ์ถ๊ฐ๋ ๊ฐ์ ์ด ์ฌ์ดํด์ ๋ง๋๋์ง ์ฒดํฌํ๋ ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ์ฌ ๊ฐ์ค์น๊ฐ ์์ ๊ฐ์ ์ ์์๋๋ก ์ ํํ๋ ๋ฐฉ๋ฒ
- ํ๋ฆด ์๊ณ ๋ฆฌ์ฆ : ๊ตฌ์ฑ๋ ์ต์ ์ ์ฅ ํธ๋ฆฌ ๋ถ๋ถ์ ๋ฐฉ๋ฌธํ์ง ์์ ์๋ก์ด ์ ์ ๊ณผ ๊ฐ์ ์ ์ ํํ์ฌ ํ์ฅํ๋ ๋ฐฉ๋ฒ
๋ฐ์ํ