Algorithms and Data Structures in JavaScript - Lee-hyuna/33-js-concepts-kr GitHub Wiki
JavaScript์ ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ
์๋
ํ์ธ์ ๋
์ ์ฌ๋ฌ๋ถ!
์ต๊ทผ GitHub์์ JavaScript ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ Repository๋ฅผ ์์ํ์ฌ ES6 JavaScript๋ก ๊ตฌํ๋ ๊ณ ์ ์ ์ธ ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ถ๊ฐ ์ ๋ณด ๋ํ ์ค๋ช
๋ฐ ๋งํฌ, YouTube ๋น๋์ค๋ฅผ ์ ๊ณตํฉ๋๋ค. ํด๋น ์ ์ฅ์์ ์ธ๊ธ ๋ ๋ชจ๋ ๋น๋์ค๊ฐ ํฌํจ ๋ ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ YouTube ์ฌ์ ๋ชฉ๋ก๋ ์์ผ๋ฏ๋ก ์จ๋ผ์ธ ํ์ต ๊ฐ์ข๋ฅผ ์๊ฐ ํ ์ ์์ต๋๋ค. :)
git ์ฃผ์ https://github.com/trekhleb/javascript-algorithms
์ ํ๋ธ ์ฃผ์ https://www.youtube.com/playlist?list=PLLXdhg_r2hKA7DPDsunoDZ-Z769jWn4R8
๊ทธ๋์ ์ ๋ ๊ฐ๋ฐ์๋ค์ด ์๊ณ ๋ฆฌ์ฆ์ ๋ฐฐ์ฐ๊ณ ์ฐ์ตํ๊ณ JavaScript์์ ์๊ณ ๋ฆฌ์ฆ์ ํ๋๋ก ๋๋ ํ๋ก์ ํธ์ ์ฃผ์ ์์ด๋์ด๋ฅผ ์ด๋ฏธ ํ์ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด ๊ณผ์ ์ ๋ ๋งค๋๋ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํด ๊ฐ ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ํ ๊ทธ๋ํฝ ๊ทธ๋ฆผ์ ๊ทธ๋ ค ์๊ณ ๋ฆฌ์ฆ์ ์์ด๋์ด๋ฅผ ์ฝ๊ฒ ํ์ ํ๊ณ ์๊ธฐ ํ ์ ์๋๋ก ํ์ต๋๋ค.
๋ํ ๊ณต๋ถํ๋ ๋์ ์ ์ฉ ํ ์ ์๋ README ํ์ผ์์ ์ค์ฉ์ ์ธ ์ ๋ณด๋ฅผ ์ฐพ์ ์๋ ์์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด :
- Big O ํ๊ธฐ๋ฒ ๊ทธ๋ํ - O(n!) ํน์ O(nยฒ)์ ๋ฌด์์ด ์๋ชป ๋์๋์ง ๋น ๋ฅด๊ฒ ๋ณด๊ธฐ ์ํ ๊ทธ๋ํ์ ๋๋ค.
- ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ ๋ Big O ํ๊ธฐ๋ฒ ๋ฐ ์ฑ๋ฅ ๋น๊ต ๋ชฉ๋ก - 10!ํฉํ ๋ฆฌ์ผ(10 * 9 * 8 * โฆ * 3 * 2 * 1)์ด ์ผ๋ง๋ ํฐ์ง ๊ตฌํ๊ธฐ(๋ต์ 3628800์ ๋๋ค.)
- ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ด์์ ๋ณต์ก์ฑ - ๋ค์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๋ํ ๊ฒ์, ์ฝ๊ธฐ ๋๋ ์ฝ์ ์๋
- ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋น๊ตํ ๋ณต์ก์ฑ - ์ํฉ์ ๋ง๋ ์ ์ ํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ ์ ์๋๋ก ์ง์
๋ชจ๋ ์ฝ๋๋ ํ ์คํธ๋ค๋ก 100%์ปค๋ฒ๊ฐ ๋ฉ๋๋ค. ์ด๊ฒ์ ์ฝ๋๊ฐ ์ ์์ ์ผ๋ก ์๋ ํ ์ ์๋๋ก ํด์ฃผ๋๊ฒ ๋ฟ๋ง ์๋๋ผ ๊ฐ๊ฐ์ ์๊ณ ๋ฆฌ์ฆ์ด๋ ๋ฐ์ดํฐ๊ตฌ์กฐ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง ๊ธฐ๋ณธ ์๋์ด ๋ฌด์์ธ์ง(heap์ ์ํ polling์ด๋ผ๊ณ ๋งํฉ์๋ค.) ๊ทธ๋ฆฌ๊ณ edge case(์ฃ์ง ์ผ์ด์ค - ๊ทธ๋ํ๊ฐ ์ง์ ๋ ๋ ํด์ผ ํ ์ผ)๊ฐ ๋ฌด์์ธ์ง ๋น์ ํํ ํ์์ ์ค๋๋ค.
Repository ๋ํ ๋์ดํฐ์ ๋๋ค. ์ด๊ฒ์ ๋น ํ ์คํธ์ผ์ด์ค๋ค์ ๊ฐ์ง๊ณ ์๋ ๋จ์ง ์์ ํจ์ ํ ํ๋ฆฟ์ ๋๋ค. ์ด๊ฒ์ repo๋ฅผ ๋ณต์ ํ๋ ๊ฒ๋ง์ผ๋ก๋ ๋น์ ์ด ํ ์คํธ๋ฅผ ์์ํ๊ฑฐ๋ ์๊ณ ๋ฆฌ์ฆ์์ ์ ํ ์ ์๋๋ก ๋์์ค๋๋ค.
ํ์ฌ๋ ๋ค์๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค:
- Linked List
- Queue
- Stack
- Hash Table
- Heap
- Priority Queue
- Trie
- Tree (Binary Search Tree, AVL Tree)
- Graph (both directed and undirected)
- Disjoint Set
์ด ๋ฐ์ดํฐ ๊ตฌ์กฐ ์ธ์๋ 50๊ฐ ์ด์์ ์ธ๊ธฐ์๋ ์๊ณ ๋ฆฌ์ฆ์ด ๊ตฌํ๋ฉ๋๋ค.
๊ทธ์ค์๋ ์ ๋ ฌ, ๊ฒ์ ์๊ณ ๋ฆฌ์ฆ, ๊ทธ๋ํ/tree/sets/string/math์ ๊ดํ ์๊ณ ๋ฆฌ์ฆ์ด ์์ต๋๋ค.
๋ชจ๋ ์๊ณ ๋ฆฌ์ฆ์ ํจ๋ฌ๋ค์์ ๋ฐ๋ผ ๋ถ๋ฅ๋ฉ๋๋ค.
- Brute Force Algorithms - ๋ชจ๋ ๊ฐ๋ฅ์ฑ์ ํ์ธํ๊ณ ๊ฐ์ฅ ์ต์ ์ ํด๊ฒฐ์ฑ ์ ์ ํํ๋ค.
- Greedy Algorithms - ๋ฏธ๋์ ๋ํ ์๊ฐ์ ํ์ง์์์ฑ ํ์ฌ์ ๊ฐ์ฅ ์ต์ ์ ์ต์ ์ ์ ํํ๋ค.
- Divide and Conquer Algorithms(๋ถํ ์ ๋ณต๋ฒ ์๊ณ ๋ฆฌ์ฆ) - ์์ ํํธ๋ก ๋๋ ์ ํด๊ฒฐํ๋ค.
- Dynamic Programming Algorithms(๋์ ํ๋ก๊ทธ๋๋ฐ ์๊ณ ๋ฆฌ์ฆ) - ์ด์ ์ ์ฐพ์๋ sub-solution์ ์ฌ์ฉํด์ ํด๊ฒฐํ๋ค.
- Backtracking Algorithms - ๋ธ๋ฃจํธ ํฌ์ค์ ๋น์ทํ๊ฒ ๋ชจ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ ํด๊ฒฐ์ฑ ์ ์์ฑํ๋๋ก ์๋ํ๋ค. ํ์ง๋ง ๋ชจ๋ ์กฐ๊ฑด์ ๋ง์กฑํ๊ณ ๊ณ์ํด์ ์ฐจํ์ ํด๊ฒฐ์ฑ ์ ์์ฑํ ์ ์์๋๋ง ๋งค๋ฒ ํด๊ฒฐ์ฑ ์ ์์ฑํฉ๋๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ์๋ ๋ค์ ๋๋์๊ฐ์ ํด๊ฒฐ์ฑ ์ ์ฐพ๊ธฐ ์ํ ๋ค๋ฅธ ๊ฒฝ๋ก๋ก ํฅํฉ๋๋ค.
JavaScript์๊ณ ๋ฆฌ์ฆ ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ Repository๋ ์์ง ๊ฐ๋ฐ ์ค์ด๋ฉฐ ๋ ๋ง์ ์๊ณ ๋ฆฌ์ฆ ๋ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๊ฐ ์์ง ๋์ค์ง ์์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น์ ์ ์ฝ๋์ ์น์ ์๋ ค์ง ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ์ ๊ธฐ์ฌํจ์ผ๋ก์จ ๊ทธ๊ฒ์ ์ผ๋ถ๊ฐ ๋ ์ ์์ต๋๋ค!
์ด Repository๊ฐ ๋์์ด ๋๊ธธ ๋ฐ๋๋๋ค. ์ฝ๋ฉ์ ์ฆ๊ธฐ์ญ์์ค!