์๋ฃ๊ตฌ์กฐ(Data Structure)
๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํจ์จ์ ์ผ๋ก ๋ฐฐ์นํ๊ณ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํ๋ค. ๋ฐ์ดํฐ ํน์ฑ์ ๋ง๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ํํ๋ ์ผ์ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ํด์ ํ์์ ์ธ ์ผ์ด๋ค.
- ๋ชฉ์ : ์๋น์ค๋ ์ดํ๋ฆฌ์ผ์ด์
์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๊ณ ํจ์จ์ ์ผ๋ก ๊ฒ์(์ ๊ทผ), ์ฝ์
, ์ญ์ ํ ์ ์์ผ๋ ค๋ฉด ํด๋น ๊ธฐ๋ฅ์ ์ ํฉํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฐ๋ ๊ฒ์ด ์ค์ํ๋ค.
- ์ข
๋ฅ: ๋ฐฐ์ด, ๋จ์ผ ์ฐ๊ฒฐ๋ฆฌ์คํธ, ์ด์ค ์ฐ๊ฒฐ๋ฆฌ์คํธ, ์คํ, ํด์ ํ
์ด๋ธ ๋ฑ
์๋ฃ๊ตฌ์กฐ ๊ณต๋ถ๋ฐฉํฅ
- Order ์๋ฃ ๊ตฌ์กฐ ์์ ์๋ ๋ฐ์ดํฐ๋ค์ ์์๊ฐ ๋ณด์ฅ๋๋์ง
- Unique ์ค๋ณต๋ ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ ์ ์๋์ง
- Search ๊ฒ์ํ ๋ ์ผ๋ง๋ ํจ์จ์ ์ธ์ง
- Modification ์์ ํ ๋ ์ผ๋ง๋ ํจ์จ์ ์ธ์ง
- ์๊ฐ์ด ์๋ค๋ฉด ๊ตฌํ๋ฐฉ๋ฒ, ์ฌํญ์ ์ผ์ผ์ด ๊ณต๋ถํ๋ ๊ฒ ๋ณด๋ค๋, ํด๋น ์๋ฃ๊ตฌ์กฐ๋ ์ด๋ค ์ํฉ์ ์ฐ๋ ๊ฒ์ด ์ข๊ณ ์ด๋ค API ๋ค์ด ์๋์ง ์์ฃผ๋ก ๊ณต๋ถํ๋ฉด ์ข์.
์๋ฃ๊ตฌ์กฐ์ ์ข
๋ฅ
1. ์ ํ ์๋ฃ๊ตฌ์กฐ
์ ํ ์๋ฃ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฒ๋ผ ๊ธธ๊ฒ ๋์ด๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
- ๋๋ค ์ ๊ทผ ๊ฐ๋ฅ: ๋ชจ๋ ๋ฐ์ดํฐ์
O(1)
๋ก ์ ๊ทผ ๊ฐ๋ฅํ ์๋ฃ๊ตฌ์กฐ
- ๋ฐฐ์ด(Array)
- ํด์(Hash)
- ํด์ ํ
์ด๋ธ(Hash Table)
- ํด์ํจ์์ ํค๊ฐ์ ๋ฃ์ด ์ฃผ์๊ฐ์ ์ป๊ณ ๊ทธ ์ฃผ์์ ์์นํ ๋ฒํท์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ์
- ํญ์
O(1)
์ด ๋ณด์ฅ๋๋ ๊ฒ์ ์๋๋ค.
- ๋๋ค ์ ๊ทผ ๋ถ๊ฐ๋ฅ: ๋ชจ๋ ๋ฐ์ดํฐ์
O(1)
๋ก ์ ๊ทผ์ด ๋ณด์ฅ๋์ง ์๋ ์๋ฃ๊ตฌ์กฐ
์ ํ ์๋ฃ๊ตฌ์กฐ ํ์๋ฒ
- ์์ฐจ ํ์
- ์ด๋ถ ํ์
2. ๋น์ ํ ์๋ฃ๊ตฌ์กฐ
๋น์ ํ ์๋ฃ๊ตฌ์กฐ๋ ์ ํ ์๋ฃ๊ตฌ์กฐ๊ฐ ์๋ ๋ชจ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
๊ทธ๋ํ ์ํ ์๊ณ ๋ฆฌ์ฆ
- ๊น์ด ์ฐ์ ํ์(DFS)
- ๋๋น ์ฐ์ ํ์(BFS)
ํธ๋ฆฌ ์ํ ์๊ณ ๋ฆฌ์ฆ
- ์ ์ ์ํ(preorder)
- ์ค์ ์ํ(inorder)
- ํ์ ์ํ(postorder)
- ๋ ๋ฒจ ์์ ์ํ(levelorder)
๊ทธ ์ธ
๊ธฐํ
Ref
์๊ณ ๋ฆฌ์ฆ(Algorithm)
์ ํ๋ ๊ณต๊ฐ๊ณผ ์๊ฐ ์์์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊ฒ์ธ์ง๋ฅผ ์ ํด๋์ ๋ก์ง(์ฃผ์ด์ง ์ธํ์ผ๋ก ์ ์๋ ๊ณ์ฐ์ ์ํํ ๋ค ์์ํ์ ๋ด๋ ๊ฒ์ ๋งํจ)
์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ๋ฐฉํฅ
- ์ธํ ์ฌ์ด์ฆ๊ฐ ์ปค์ง์๋ก Big O๊ฐ ์ด๋ป๊ฒ ๋ณํํ๋์ง
- ์๊ฐ ๋ณต์ก๋, ๊ณต๊ฐ ๋ณต์ก๋ ๊ณ ๋ ค
- ์ด๋ค ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ์ฌ ์๊ณ ๋ฆฌ์ฆ์ ์์ฑํ๋ ๊ฒ์ด ์ข์์ง
- ์ต์ข
์ ์ผ๋ก ์์ ๊ณต๊ฐ๊ณผ ๋น ๋ฅธ ์๊ฐ์์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋ง๋๋ ๊ฒ์ด ๋ชฉํ
- ์๋์์ฑ, ๋ณต๋ถ ์ฌ์ฉ์ ์ต์ํํ ๊ฒ
- ์๊ณ ๋ฆฌ์ฆ ํ์ด์ ์ฌ์ฉํ๋ ์ธ์ด๋ฅผ ์ดํดํ๋ ค๊ณ ํ ๊ฒ
- ์ถฉ๋ถํ ๊ณ ๋ฏผ & ๋ฌธ์ ์ ๋ํ ์ดํด/ํ์ด ์์ด๋์ด, ์ด๋ ค์ ๋ ์ ๋ฐ ํด๊ฒฐ์ฑ
์๊ฐํ ๊ฒ
์๊ณ ๋ฆฌ์ฆ์ ์ข
๋ฅ
ํ์(Search)
์ ๋ ฌ(Sorting)
์์ ํ์(Exhaustive Search)
๋ถํ ์ ๋ณต(Divide and Conquer)
๋์ ๊ณํ๋ฒ(Dynamic Programming)
๊ทธ๋ฆฌ๋(Greedy)
ํธ๋ฆฌ
๊ทธ๋ํ
์ต๋จ ๊ฒฝ๋ก
์ต์ ์ ์ฅ ํธ๋ฆฌ(MST, Minimum Spanning Tree)
๊ธฐํ
- ๋นํธ ์ฐ์ฐ
- ์ง์ ๋ณํ
- ์ ํด๋ฆฌ๋ ํธ์ ๋ฒ(์ต๋๊ณต์ฝ์, ์ต์๊ณต๋ฐฐ์)
- ํฌํฌ์ธํฐ(์ฌ๋ผ์ด๋ฉ ์๋์ฐ)
- ์กฐํฉ, ์์ด
- ํ๋ผ๋ฉํธ๋ฆญ ์์น
- ์ต์ฅ ์ฆ๊ฐ ์์ด(LIS)
- ์ต์ ๊ณตํต ์กฐ์(LCA)
- ๋นํธ ๋ง์คํฌ(BitMask)
- Matching Parenthesis problem
- Variables / Pointers manipulation
- reverse linked list(duplicates, removing duplicates)
- Custom data structures(Object oriented programming)
Ref