๐ ๋ฒ์ : Ep26. ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ - Ep29. ํด๋ฆฐ์ฝ๋
๐ ์ฑ ์์ ๊ธฐ์ตํ๊ณ ์ถ์ ๋ด์ฉ์ ์จ๋ณด์ธ์.
์๊ฐ๋ณต์ก๋๋ ๊ฐ์ผ๋ฉด์(O(N²)) ์ฑ๋ฅ์ ๋ค๋ฅธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ 3๊ฐ์ง = ๋ฒ๋ธ / ์ ํ / ์ฝ์ ์ ๋ ฌ
โผ ์๊ฐ ๋ณต์ก๋๊ฐ ๊ฐ์๋ฐ ์๋ ์ฐจ์ด๊ฐ ๋๋ ์ด์ ?
๋ชจ๋ ์๊ฐ๋ณต์ก๋๋ ๊ฐ์ง๋ง ์๊ณ ๋ฆฌ์ฆ์ ์ด๊ธฐ ๋ฐ์ดํฐ ์ํ์ ๋ฐ๋ผ ์ฒ๋ฆฌ ์๋๊ฐ ๋ฌ๋ผ์ง๊ธฐ๋ ํ๊ณ , ์ต์ ์ ๊ฒฝ์ฐ์๋ ์๊ฐ์ด ๋งค์ฐ ๊ธธ์ด์ง๊ธฐ๋ ํ๋ค.
ํ์ง๋ง ์ต์ ์ ๊ฒฝ์ฐ๋ ์ ๋ฐ ๋๋ฌผ๊ธฐ ๋๋ฌธ์ ๋ณดํต ํ๊ท ์ ์ธ ์๊ฐ์ด ์ธก์ ๋๋ค. ๋ฐ๋ผ์ ์๊ฐ๋ณต์ก๋๋ ๊ฐ์ง๋ง ์ฑ๋ฅ์ด ๋ฌ๋ผ์ง๊ธฐ๋ ํ๋ค.
์ค์ ๋ก๋ bubble < selection < insertion ์์ผ๋ก ์ฑ๋ฅ์ด ์ข๋ค.
- ๋ฒ๋ธ์ ๋ ฌ (Bubble Sort)
- ์ค์ ๋ก ์ฉ ํจ์จ์ ์ด์ง๋ ์์์ ๋ง์ด ์ฌ์ฉํ์ง๋ ์์
- ์ผ์ชฝ, ์ค๋ฅธ์ชฝ์ ๋น๊ตํ๋ฉด์ ์๋ฆฌ๋ฅผ ์ด๋ํ๋ฉฐ ํ ์ฌ์ดํด์ ๋๋ ์๊ณ ๋ฆฌ์ฆ
- ์ต์ ์ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ๋ฐ์ดํฐ์ ์๋ฆฌ๊ฐ ๋ฐ๋ ์๋ ์์
- ์ ํ ์ ๋ ฌ (Selection Sort)
- ๊ฐ์ฅ ์๊ฑฐ๋ ๊ฐ์ฅ ํฐ ๋ฐ์ดํฐ์ ์์น๋ฅผ ๊ธฐ์ตํด์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ๋ค.
- ์ ํ๋ ๋ฐ์ดํฐ๊น์ง๋ง ์์๊ฐ ์ ๋ ฌ๋๋ฏ๋ก ๋ฒ๋ธ ์ ๋ ฌ๋ณด๋ค ํจ์จ์ ์ด๋ค.
- ์ฝ์
์ ๋ ฌ (Inserttion Sort)
- ์์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ฉด์ ์๋ฆฌ๋ฅผ ์ ๋ ฌํด ์ค๋ค.
- ํ ์ฌ์ดํด๋น ์ด๋์ ํ ๋ฒ๋ง ํ๋ค.
- ๋ฐ์ดํฐ์ ์๋ฆฌ๋ฅผ ๊ตํํ๋ ๊ฒ์ด ์๋๋ผ ๋ฐ์ด ๋ฃ๋ ๋ฐฉ์์ด๋ค.
- ์คํ (Stack) VS ํ (Queue)
- ์ด ๋ ๊ฐ์ง๋ ๋ฐฐ์ด์ฒ๋ผ ์ค์ ๋ก ์กด์ฌํ๋ ๊ฐ๋ ์ ์๋๊ณ , ์์ ์์ ๊ฐ๋ ⇒ ํ๋ ์คํ์ ๋ฌธ๋ฒ์ผ๋ก ๊ตฌํ๋ ๊ฒ์ด ์๋
- ํ๋ก๊ทธ๋จ ๋ฌธ๋ฒ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ ์ ๊ท์น์ ๋ถ์ฌํ๊ธฐ๋ง ํ๋ฉด ๋๋ค.
- ์ด๋ฐ ๊ฐ๋ ์ ์ถ์๊ตฌ์กฐ (Abstract Data Type, ADT)๋ผ๊ณ ํ๋ค.
- ์คํ (Stack)
- ํฌ ์ผ์ดํฌ ๋จน์ ๋์ ๊ฐ๋ค๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค.
- ๋งจ ์๋๋ถํฐ ์์ด๊ณ , ๋งจ ์์ ๋ฐ์ดํฐ๋ถํฐ ์ฌ์ฉ๋๋ค. = LIFO ( Last in, First out)
- ์น ๋ธ๋ผ์ฐ์ ์ ๋ค๋ก ๊ฐ๊ธฐ ๋จ์ถํค(โฌ ) , ๋๋๋ฆฌ๊ธฐ ํค(Ctrl + z)
- ํ (Queue)
- ๋ฒ์ค ํ ๋์ ๊ฐ๋ค๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค.
- ๋งจ ์๋๋ถํฐ ์์ด๊ณ , ๋งจ ์๋์ ์๋ ๋ฐ์ดํฐ๋ถํฐ ์ฌ์ฉ๋๋ค. = FIFO (First in, First out)
- ์ผํ๋ชฐ ์ฒ๋ฆฌ ์์คํ ( ์ฃผ๋ฌธ์ด ๋ค์ด์จ ์์๋๋ก data ์๊ณ , ์ ์ผ ๋จผ์ ๋ค์ด์จ ์ฃผ๋ฌธ๋ถํฐ ์ฒ๋ฆฌํจ)
- ํด์ ํ
์ด๋ธ
- ํ๋ก๊ทธ๋จ์ ์๋๋ฅผ ๋ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด์ ์ฌ์ฉํ๋ค.
- ํค์ ๊ฐ์ ์ง์ง์ด์ ๋ชจ์ ๊ฒ
- ์ด๋ค ๊ฐ์ ์ฐพ์ ๋ ๋ฐฐ์ด์ ์ ํ ๊ฒ์ (๋ฐ์ดํฐ๋ฅผ ์ฒ์๋ถํฐ ํ์ธํ๋ฉฐ ๊ฒ์) ํด์ผ ํ๋๋ฐ, ํด์ํ ์ด๋ธ์ ์ฌ์ ์ฒ๋ผ ์ํ๋ ๊ฐ์ ๋ฐ๋ก ๊ฒ์ํ ์ ์๋ค.
- ์ ํ ๊ฒ์ ์๊ฐ๋ณต์ก๋ : O(N), ํด์ ํ ์ด๋ธ ์๊ฐ๋ณต์ก๋ : O(1)
โผ ํด์ํ ์ด๋ธ ์์ธํ ์์๋ณด๊ธฐ
- ํด์ํ ์ด๋ธ์๋ ํด์ ํจ์๋ผ๋ ๊ฒ์ด ์์ด์ key๋ฅผ ํน์ Index๋ก ๋ณํ ํด์ค๋ค.
- ํด์ ์ถฉ๋ : ๋ณํ ๋ Index์ ๊ฐ์ด ๊ฒน์น ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค.
- ์ด ๊ฒฝ์ฐ ์ฌ๋ฌ๊ฐ์ง ํด๊ฒฐ๋ฐฉ๋ฒ์ด ์๋๋ฐ 2๊ฐ์ง ์ ๋๋ง ์๊ฐํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ๋จผ์ ๋ณํ๋ key์ ๋ฒํธ๋ฅผ ํด๋น Index์ ๋ถ์ฌํ๊ณ , ๊ฒน์น๋ key๋ฅผ ๋ค์ Index์ ๋ถ์ฌํ๊ธฐ
- ๊ฒน์น๋ Index์ ๋ ๋ค๋ฅธ ๋ฐฐ์ด์ ๋ฃ์ด์ ํด๊ฒฐํ๊ธฐ
- ์ถฉ๋์ด ์ผ์ด๋๋ ๊ฒฝ์ฐ์๋ ์ฌ์ค ์๊ฐ๋ณต์ก๋๊ฐ O(1)์ ์๋๋ค.
- ์ด ๊ฒฝ์ฐ ์ฌ๋ฌ๊ฐ์ง ํด๊ฒฐ๋ฐฉ๋ฒ์ด ์๋๋ฐ 2๊ฐ์ง ์ ๋๋ง ์๊ฐํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
- ํด๋ฆฐ์ฝ๋
- ์๋ฏธ ์๋ ๋ณ์, ํจ์ ์ด๋ฆ์ ์ ์ ํ ์ฌ์ฉํ๊ธฐ
- ํจ์์ด๋ฆ์ ๋์ฌ๋ก ์์ฑํ๊ธฐ (ex. userData < loadUserData)
- ๋งค๊ฐ๋ณ์๋ฅผ ๋๋ฌด ๋ง์ด ์ฐ์ง ๋ง์ (๋ง์ ๊ฒฝ์ฐ Configuration object ๋ฐฉ์์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅ)
- Boolean ๊ฐ์ ์ธ์๋ก ๋ณด๋ด์ง ๋ง์ (true / false์ผ ๊ฒฝ์ฐ ๋ฐ๋ก ์์ฑํ๋ฉด ํจ์๊ฐ 2๊ฐ์ง ์ผ์ ํด์ผ ํ๋ค.)
- ์ถ์ฝ์ด๋ฅผ ์ฐ์ง ๋ง์ (๋ค๋ฅธ ์ฌ๋์ด ์์๋ณด๊ธฐ ์ฝ๊ฒ ์์ฑ)
โ๐ป ์ค๋ ์ฝ์ ์๊ฐ์? ๋ ์ค๋ฅด๋ ์๊ฐ์ ๊ฐ๋ณ๊ฒ ์ ์ด๋ณด์ธ์.
์ค๋ ๋ด์ฉ ์ค์๋ ์ฑ ์ผ๋ก ๋ณด๊ณ ์ดํดํ๊ธฐ์๋ ์ด๋ ค์ด ๊ฐ๋ ์ด ๋ง์์ ์ดํดํ๋ ๋ฐ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ ธ๋ค.
๊ทธ๋๋ ์ ์ดํด๊ฐ ๋์ง ์์์ ์ด ์ฑ ์ ์๋ณธ?์ด๋ผ๊ณ ํ ์ ์๋ ์ ํ๋ธ ์์์ ๋ดค๋๋ ์ ๋ง ์ฝ๊ฒ ์ดํดํ ์ ์์๋ค. ํ์คํ ๊ธ < ๊ทธ๋ฆผ < ์์ ์์ผ๋ก ์ดํด๊ฐ ์ ๋๋ ๊ฒ ๊ฐ๋ค๊ณ ๋๊ผ๊ณ ์์ผ๋ก ๋ธ๋ก๊ทธ์ ๊ฐ๋ ์ ์ ๋ฆฌํ ๋ ๊ธ๋ก๋ง ์ ๋ฆฌํ์ง ๋ง๊ณ ๋ค๋ฅธ ์๋ฃ๋ค๋ ํจ๊ป ์ฌ์ฉํ์ฌ ์ ๋ฆฌํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
๊ทธ๋ฆฌ๊ณ ํด๋ฆฐ์ฝ๋์ ๋ํ ๋ด์ฉ์ด ๋ค์ ๋์๋๋ฐ, ์ฑ ์ผ๋ก ์ฝ์์ ๋ ๋ถ๋ช ๊ธฐ์ตํ๋ ๊ฒ๋ค์ธ๋ฐ ๋ง์ ์ฝ๋ ์์ฑํ ๋๋ ์ํํ ํ ์ ์ด ๋ง์ ๊ฒ ๊ฐ์์ ์์ผ๋ก ์ฝ๋ ์งค ๋ ์กฐ๊ธ ๋ ์๊ฐํ๋ฉด์ ์์ฑํด์ผ๊ฒ ๋ค๊ณ ๋ค์งํ๋ค.
๐ ๊ถ๊ธํ ๋ด์ฉ์ด ์๊ฑฐ๋, ์ ์ดํด๋์ง ์๋ ๋ด์ฉ์ด ์๋ค๋ฉด ์ ์ด๋ณด์ธ์.
3๊ฐ์ง์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ด ์ ์ดํด๊ฐ ๋์ง ์์์ ๋ค๋ฅธ ์๋ฃ๋ค์ ์ฐพ์๋ณด๋ค๊ฐ ๋์ฝ๋ผ์ค๊ฐ ์ ์ค๋ช ํด ๋ ์์์ ๋ฐ๊ฒฌํด์ ์ฒจ๋ถํด ๋์๋ค.
- ์๊ณ ๋ฆฌ์ฆ & ๋ฐ์ดํฐ ๊ตฌ์กฐ Sort
๋๊ธ