์ด ๊ธ์ Boostcourse ๋ชจ๋๋ฅผ ์ํ ์ปดํจํฐ ๊ณผํ์ ์๊ฐํ๊ณ ์ํคํผ๋์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฑํ์ต๋๋ค.
Data Structure, ์๋ฃ ๊ตฌ์กฐ๋ ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ์ ์ํ ์๋ฃ์ ๊ตฌ์กฐ์ฒด, ์กฐ์ง์ ๋งํ๋ค. ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ๋ณด๋ฅผ ๊ฐ๊ธฐ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ฅํ ์ ์๋๋ก ํด์ค๋ค. ์๋ฃ๊ตฌ์กฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ ์ด์์์ด๋ผ๊ณ ํ ์ ์๋ค. ๋ชฉ์ ์ ๋ง๋ ์๋ฃ๊ตฌ์กฐ๋ ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ๋์ฌ์ฃผ๊ธฐ ๋๋ฌธ์ ์ค์ํ๋ค.
๋ค์ํ ์๋ฃ ๊ตฌ์กฐ ์ค
๋ฅผ ๊ฐ๋จํ๊ฒ ์ดํด๋ณด๊ฒ ๋ค.
๊ฐ์ ์๋ฃํ์ผ๋ก ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ์์ ์ผ๋ก ์ ์ฅํ๋ค.
๐ก ์ธ๋ฑ์ค๋ฅผ ์ด์ฉํด ์ํ๋ ๊ฐ์ ๋ฐ๋ก ์ ๊ทผ์ด ๊ฐ๋ฅํ๋ค.
๋ฉ๋ชจ๋ฆฌ ๋ฉ์ด๋ฆฌ ์ฌ๋ฌ๊ฐ๋ฅผ ํฌํจํ ๋ฐ์ดํฐ๊ตฌ์กฐ, ๋ ธ๋(node)๋ฅผ ๋จ์๋ก ํ๋ค. ์๋ฃ์ ๋ฐ๋ก ๋ค์ ์๋ฃ์ ์ฃผ์ (ํฌ์ธํฐ)๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
๋จ์ผ ์ฐ๊ฒฐ ๋ชฉ๋ก (Rune Magnussen, ์ํคํผ๋์)
์๋ ์์๋ ๋ฉ๋ชจ๋ฆฌ์ ์์น๋ฅผ ๋ณด์กดํ๋ฉด์ ๋ฆฌ์คํธ๋ฅผ ์ถ๊ฐํ ์ ์๋ค.
๋ฐฐ์ด๊ณผ ๊ฐ์ด ์์ ์ ๊ทผ์ด ๋ถ๊ฐํ๋ค.
์ด์ง๊ฒ์(Binary search)์ ์ฐ๊ฒฐ๋ฆฌ์คํธ(Linked list)๊ฐ ๊ฒฐํฉ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค. ๊ฐ ๋ ธ๋๋ค์ ์ผ์ ํ ์ธต์ ์ํ๋ฉฐ, ๋ค์ ์ธต์ ๋ ธ๋๋ค์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ๊ฐ๋๋ค. ๊ฐ์ฅ ๋์ ์ธต์์ ํธ๋ฆฌ๊ฐ ์์๋๋ ๋ ธ๋๋ฅผ root๋ผ๊ณ ํ๋ค.
- ๊ฐ ๋ ธ๋์ ๊ฐ์ด ์๋ค.
- ๊ฐ๋ค์ ์ ์์๊ฐ ์๋ค.
- ๋ ธ๋์ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์๋ ๊ทธ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์์ ๊ฐ๋ค์ ์ง๋ ๋ ธ๋๋ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ์๋ ๊ทธ ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฐ ๊ฐ๋ค์ ์ง๋ ๋ ธ๋๋ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
- ์ข์ฐ ํ์ ํธ๋ฆฌ๋ ๊ฐ๊ฐ์ด ๋ค์ ์ด์ง ํ์ ํธ๋ฆฌ์ฌ์ผ ํ๋ค.
๐ก ๊ฒ์ ์คํ ์๊ฐ๊ณผ ๋
ธ๋ ์ฝ์
์๊ฐ ๋ชจ๋ O(log n)์ด๋ค.
๋ฐฐ์ด๊ณผ ์ฐ๊ฒฐ๋ฆฌ์คํธ๊ฐ ๊ฒฐํฉ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ด๋ค. ๊ฐ ์๋ฃ๋ค์ ํด์ํจ์๋ฅผ ํตํด ์ด๋ค ๋ฐ๊ตฌ๋์ ์ํ ์ง ์ ํด์ง๋ค.
๐ก ๋ง์ฝ ๋ฐ๊ตฌ๋์ 1๊ฐ์ ๊ฐ์ฉ๋ง ๋ค์ด์๋ค๋ฉด ๊ฒ์์๊ฐ์ O(1)์ด๋ค. ํ์ง๋ง ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ๋จ ํ๋์ ๋ฐ๊ตฌ๋์ ๋ชจ๋ ๊ฐ๋ค์ด ๋ด๊ฒจ์ O(n)์ด ๋ ์๋ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก๋ ์ต๋ํ ๋ง์ ๋ฐ๊ตฌ๋๋ฅผ ๋ง๋๋ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ O(1)์ ๊ฐ๊น๋ค๊ณ ๋ณผ ์ ์๋ค.
์ด ์ธ์๋ ๋ค์ํ ์๋ฃ๊ตฌ์กฐ๋ค์ด ์๊ณ ์ฌํ ๋ด์ฉ๋ค์ ์ถํ ๋ณด์ถฉํด๊ฐ๋ฉฐ ํ์ตํ๋๋ก ํด์ผ๊ฒ ๋ค. ํ์ดํ !๐ฑโ๐