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๊ฐ€ ๋„์›€์ด ๋˜๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ์ฝ”๋”ฉ์„ ์ฆ๊ธฐ์‹ญ์‹œ์˜ค!