์ž๋ฃŒ๊ตฌ์กฐ(Data Structure) ์ด์ •๋ฆฌ

    ๋Œ€ํ‘œ์  ์ž๋ฃŒ๊ตฌ์กฐ ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ •๋ฆฌ

    ์ตœ๊ทผ์— ์ž๋ฃŒ๊ตฌ์กฐ ๋ถ„๋ฅ˜ ๋„์‹, ๋ฐฐ์—ด(array), ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(linked list), ์Šคํƒ(stack), ์žฌ๊ท€ํ•จ์ˆ˜์™€ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ, ํ(queue), ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ๊ณผ ํ์— ๋Œ€ํ•ด ๋‹ค์‹œ ๊ณต๋ถ€ํ–ˆ๋‹ค. ์ด ์™ธ์—๋„ ํ•ด์‹œํ…Œ์ด๋ธ”, ๊ทธ๋ž˜ํ”„, ํŠธ๋ฆฌ, ํž™ ๋“ฑ ์ค‘์š”ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํฌํ•จํ•ด ์ค‘์š” ์ž๋ฃŒ๊ตฌ์กฐ 8๊ฐœ๋ฅผ ์ •๋ฆฌํ•ด๋ณด๋ คํ•œ๋‹ค. 


    0. ์ž๋ฃŒ๊ตฌ์กฐ ๋ถ„๋ฅ˜ ๋„์‹

    ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ํฌ๊ฒŒ ์„ ํ˜•(Linear) ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๋น„์„ ํ˜•(Non-linear) ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๋ถ„๋ฅ˜๋œ๋‹ค

    • ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ:
      ๋ฐฐ์—ด, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ์Šคํƒ, ํ ๋“ฑ์ด ๋Œ€ํ‘œ์ 
      • ํŠน์ง•: ๋ฉ”๋ชจ๋ฆฌ ์ƒ์— ์—ฐ์†์  ๋˜๋Š” ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋ฉฐ, ์‚ฝ์ž…/์‚ญ์ œ ์—ฐ์‚ฐ์ด ํ•œ์ชฝ ๋ ๋˜๋Š” ์ค‘๊ฐ„์—์„œ ์ด๋ฃจ์–ด์ง
    • ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ:
      ํŠธ๋ฆฌ, ํž™, ๊ทธ๋ž˜ํ”„ ๋“ฑ์ด ์žˆ์œผ๋ฉฐ, ๊ณ„์ธต์  ๋˜๋Š” ๋„คํŠธ์›Œํฌ ํ˜•ํƒœ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅ
      • ํŠน์ง•: ๋…ธ๋“œ๋“ค ๊ฐ„์˜ ๊ด€๊ณ„๊ฐ€ ๊ณ„์ธต์ (ํŠธ๋ฆฌ, ํž™) ๋˜๋Š” ์ž„์˜(๊ทธ๋ž˜ํ”„)๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Œ

    ๋˜ํ•œ ํ•ด์‹œํ…Œ์ด๋ธ”์€ ํ‚ค-๊ฐ’ ์Œ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋น ๋ฅธ ๊ฒ€์ƒ‰๊ณผ ์‚ฝ์ž…์„ ์œ„ํ•ด ์‚ฌ์šฉ๋จ


    1. ๋ฐฐ์—ด (Array)

    • ์ •์˜:
      ๋™์ผํ•œ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
    • ํŠน์ง•:
      • ์žฅ์ :
        • ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ **O(1)**์˜ ๋น ๋ฅธ ์ ‘๊ทผ ์†๋„
        • ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ๋‹จ์ˆœํ•จ
      • ๋‹จ์ :
        • ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •๋˜์–ด ์žˆ์–ด ๋™์  ํฌ๊ธฐ ์กฐ์ ˆ์ด ์–ด๋ ต๊ฑฐ๋‚˜, ๋ณ„๋„์˜ ๋™์  ๋ฐฐ์—ด ๊ตฌํ˜„์ด ํ•„์š”ํ•จ
        • ์‚ฝ์ž…/์‚ญ์ œ ์‹œ ์ „์ฒด ์š”์†Œ์˜ ์ด๋™์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Œ
    • ํ™œ์šฉ:
      ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ, ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ธฐ์ดˆ ์ž๋ฃŒ๊ตฌ์กฐ ๋“ฑ

    2. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ (Linked List)

    • ์ •์˜:
      ๊ฐ ๋…ธ๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ์™€ ๋‹ค์Œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ(์ฐธ์กฐ)๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋…ธ๋“œ๋“ค์ด ์—ฐ๊ฒฐ๋œ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ
    • ํŠน์ง•:
      • ์žฅ์ :
        • ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์œผ๋กœ ํฌ๊ธฐ ์กฐ์ ˆ์ด ์ž์œ ๋กœ์›€
        • ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ๋น ๋ฆ„ (ํŠนํžˆ ๋ฆฌ์ŠคํŠธ ์ค‘๊ฐ„์—์„œ) – ํฌ์ธํ„ฐ ์กฐ์ž‘๋งŒ์œผ๋กœ ๊ฐ€๋Šฅ
      • ๋‹จ์ :
        • ์ž„์˜ ์ ‘๊ทผ์ด ์–ด๋ ต๊ณ , ์ˆœ์ฐจ ์ ‘๊ทผ(O(n))์ด ํ•„์š”ํ•จ
        • ๊ฐ ๋…ธ๋“œ์— ์ถ”๊ฐ€์ ์ธ ํฌ์ธํ„ฐ ์ €์žฅ ๊ณต๊ฐ„ ํ•„์š”
    • ํ™œ์šฉ:
      ์Šคํƒ, ํ์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„, ๋ฐ์ดํ„ฐ ์ €์žฅ ์‹œ ๋นˆ๋ฒˆํ•œ ์‚ฝ์ž…/์‚ญ์ œ ์ž‘์—… ๋“ฑ

    3. ์Šคํƒ (Stack)

    • ์ •์˜:
      ํ›„์ž…์„ ์ถœ(LIFO, Last In First Out) ์›์น™์„ ๋”ฐ๋ฅด๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
    • ์ฃผ์š” ์—ฐ์‚ฐ:
      • Push: ์Šคํƒ์˜ top์— ์š”์†Œ ์‚ฝ์ž…
      • Pop: ์Šคํƒ์˜ top์—์„œ ์š”์†Œ ์‚ญ์ œ
    • ํ™œ์šฉ:
      • ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์‚ฌ์šฉํ•˜๋Š” ์ฝœ ์Šคํƒ
      • undo/redo ๊ธฐ๋Šฅ, ๊ด„ํ˜ธ ๊ฒ€์‚ฌ, ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS) ๋“ฑ

    ๐Ÿ“ ์žฌ๊ท€ํ•จ์ˆ˜์™€ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ

    • ์žฌ๊ท€ ํ•จ์ˆ˜:
      ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋กœ, ๋ฌธ์ œ๋ฅผ ๋” ์ž‘์€ ํ•˜์œ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ ์„œ ํ•ด๊ฒฐํ•จ
    • ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์™€์˜ ๊ด€๊ณ„:
      • ๊ฐ ์žฌ๊ท€ ํ˜ธ์ถœ ์‹œ ํ•จ์ˆ˜์˜ ์ƒํƒœ(๋งค๊ฐœ๋ณ€์ˆ˜, ์ง€์—ญ ๋ณ€์ˆ˜, ๋ฐ˜ํ™˜ ์ฃผ์†Œ ๋“ฑ)๊ฐ€ ์Šคํƒ ํ”„๋ ˆ์ž„์œผ๋กœ ์Šคํƒ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.
      • **์ข…๋ฃŒ ์กฐ๊ฑด(Base Case)**์— ๋„๋‹ฌํ•˜๋ฉด ํ˜ธ์ถœ์ด ์ข…๋ฃŒ๋˜๊ณ , ์Šคํƒ ํ”„๋ ˆ์ž„์ด ํ•˜๋‚˜์”ฉ pop๋˜์–ด ๊ฒฐ๊ณผ๊ฐ€ ์ฐจ๋ก€๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.
      • ์žฌ๊ท€ ๊นŠ์ด๊ฐ€ ๋„ˆ๋ฌด ๊นŠ์œผ๋ฉด ์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
    • ์˜ˆ์ œ:
      ํŒฉํ† ๋ฆฌ์–ผ, ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๋“ฑ์ด ๋Œ€ํ‘œ์ ์ธ ์žฌ๊ท€ ์•Œ๊ณ ๋ฆฌ์ฆ˜

    4. ํ (Queue)

    • ์ •์˜:
      ์„ ์ž…์„ ์ถœ(FIFO, First In First Out) ์›์น™์„ ๋”ฐ๋ฅด๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
    • ์ฃผ์š” ์—ฐ์‚ฐ:
      • Enqueue: ํ์˜ rear(๋’ค์ชฝ)์— ์š”์†Œ ์‚ฝ์ž…
      • Dequeue: ํ์˜ front(์•ž์ชฝ)์—์„œ ์š”์†Œ ์‚ญ์ œ
    • ํ™œ์šฉ:
      • ์ž‘์—… ๋Œ€๊ธฐ์—ด, ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ, ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS) ๋“ฑ
      • Python์˜ ๊ฒฝ์šฐ queue.Queue ๋˜๋Š” collections.deque๋ฅผ ์‚ฌ์šฉํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ๐Ÿ“ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ๊ณผ ํ

    • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ:
      ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜์–ด ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋‚˜ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
    • ํ์™€์˜ ๊ฒฐํ•ฉ:
      • ์ƒ์‚ฐ์ž-์†Œ๋น„์ž ํŒจํ„ด:
        • ์ƒ์‚ฐ์ž ์Šค๋ ˆ๋“œ: ์ž‘์—…(๋ฐ์ดํ„ฐ, ์š”์ฒญ)์„ ํ์— ์ถ”๊ฐ€
        • ์†Œ๋น„์ž ์Šค๋ ˆ๋“œ: ํ์—์„œ ์ž‘์—…์„ ๊บผ๋‚ด์–ด ์ฒ˜๋ฆฌ
      • ์Šค๋ ˆ๋“œ ์•ˆ์ „ ํ:
        • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ํ™˜๊ฒฝ์—์„œ๋Š” ๋™๊ธฐํ™”๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ์Šค๋ ˆ๋“œ ์•ˆ์ „ํ•œ ํ(์˜ˆ: Java์˜ ConcurrentLinkedQueue, Python์˜ queue.Queue)๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ๋ณด์žฅ
    • ์˜ˆ์ œ ์ฝ”๋“œ:
      • Python์—์„œ๋Š” threading ๋ชจ๋“ˆ๊ณผ queue.Queue๋ฅผ ํ™œ์šฉ
      • Java์—์„œ๋Š” ExecutorService์™€ ์Šค๋ ˆ๋“œ ์•ˆ์ „ ํ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ตฌํ˜„

    5. ํ•ด์‹œํ…Œ์ด๋ธ” (Hash Table)

    • ์ •์˜:
      ํ•ด์‹œํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณ€ํ™˜ํ•œ ๊ฐ’์„ ์ƒ‰์ธ(index)์œผ๋กœ ์‚ผ์•„ ํ‚ค(key)์™€ ๋ฐ์ดํ„ฐ(value)๋ฅผ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
    • ํŠน์ง•:
      • ํ‰๊ท  O(1)์˜ ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ ์†๋„๋ฅผ ๋ณด์žฅ
      • ํ•ด์‹œ ์ถฉ๋Œ(Collision) ํ•ด๊ฒฐ ๊ธฐ๋ฒ•: ์ฒด์ด๋‹, ์˜คํ”ˆ ์–ด๋“œ๋ ˆ์‹ฑ ๋“ฑ
    • ํ™œ์šฉ:
      ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค, ์บ์‹œ, ๋”•์…”๋„ˆ๋ฆฌ ๊ตฌํ˜„ ๋“ฑ

    6. ๊ทธ๋ž˜ํ”„ (Graph)

    • ์ •์˜:
      ๋…ธ๋“œ(์ •์ )์™€ ๊ฐ„์„ (์—ฐ๊ฒฐ)์œผ๋กœ ๊ตฌ์„ฑ๋œ ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
    • ์œ ํ˜•:
      • ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„: ๊ฐ„์„ ์ด ๋ฐฉํ–ฅ์„ฑ์„ ๊ฐ–์ง€ ์•Š์Œ
      • ์œ ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„: ๊ฐ„์„ ์— ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ์Œ
      • ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„: ๊ฐ„์„ ์— ๊ฐ€์ค‘์น˜(๋น„์šฉ)๊ฐ€ ์žˆ์Œ
    • ํ™œ์šฉ:
      • ์†Œ์…œ ๋„คํŠธ์›Œํฌ, ์ง€๋„(์ตœ๋‹จ ๊ฒฝ๋กœ), ์›น ํฌ๋กค๋ง ๋“ฑ
      • ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜: ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS), ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)

    7. ํŠธ๋ฆฌ (Tree)

    • ์ •์˜:
      ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ํ•˜๋‚˜์˜ ๋ฃจํŠธ ๋…ธ๋“œ์™€ ์—ฌ๋Ÿฌ ์ž์‹ ๋…ธ๋“œ๋“ค๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • ์ข…๋ฅ˜:
      • ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree) ๋ฐ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(BST)
      • AVL ํŠธ๋ฆฌ, ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ ๋“ฑ ๊ท ํ˜• ์žกํžŒ ํŠธ๋ฆฌ
    • ํ™œ์šฉ:
      • ํŒŒ์ผ ์‹œ์Šคํ…œ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค, ํŒŒ์‹ฑ, ๊ฒŒ์ž„ AI ๋“ฑ
      • ํŠธ๋ฆฌ ์ˆœํšŒ ๋ฐฉ๋ฒ•: ์ „์œ„(preorder), ์ค‘์œ„(inorder), ํ›„์œ„(postorder)

    8. ํž™ (Heap)

    • ์ •์˜:
      ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ๊ฐ ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ๋…ธ๋“œ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’๋‹ค๋Š” ํŠน์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
      • ์ตœ๋Œ€ ํž™(Max Heap): ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ๋…ธ๋“œ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์Œ
      • ์ตœ์†Œ ํž™(Min Heap): ๋ถ€๋ชจ ๋…ธ๋“œ๊ฐ€ ์ž์‹ ๋…ธ๋“œ๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์Œ
    • ํŠน์ง• ๋ฐ ํ™œ์šฉ:
      • ์šฐ์„ ์ˆœ์œ„ ํ: ํž™์„ ์‚ฌ์šฉํ•˜์—ฌ ์šฐ์„ ์ˆœ์œ„ ๊ธฐ๋ฐ˜ ์ž‘์—… ์ฒ˜๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰
      • ํž™ ์ •๋ ฌ(Heapsort): ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•œ ๋ฐฉ๋ฒ•

     

    ๋ฐ˜์‘ํ˜•

    '๐Ÿ—’ COMPUTER SCIENCE' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    ๋‚ด ์–ธ์–ด๋กœ ์ •๋ฆฌํ•˜๋Š” ๋จธ์‹ ๋Ÿฌ๋‹1  (5) 2024.12.11

    ๋Œ“๊ธ€