์ž๋ฃŒ๊ตฌ์กฐ?

  • Data structures are specialized formats for organizing and storing data in a computer so that it can be used efficiently.

์™œ ์ค‘์š”ํ•œ๊ฐ€

  • Data structures are crucial in the field of computer science and coding because they offer a method of organizing and storing data in an efficient and manageable format. Theyโ€™re critical because they form the foundation for modern algorithm design. Your ability to choose or design the most suited data structure for a particular task can be the difference between a solution thatโ€™s functional and efficient and one that isnโ€™t.

๋ณต์žก๋„

  • ์‹œ๊ฐ„ ๋ณต์žก๋„
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ž…๋ ฅ ํฌ๊ธฐ n์— ๋Œ€ํ•œ ํ•จ์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ
  • ๊ณต๊ฐ„ ๋ณต์žก๋„
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ž…๋ ฅ ํฌ๊ธฐ n์— ๋Œ€ํ•œ ํ•จ์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ
  • ๋น…์˜ค ํ‘œ๊ธฐ๋ฒ•
    • (์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ์‚ฐ์ •)
  • ์ข‹์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€?
    • ์‹œ๊ฐ„-๊ณต๊ฐ„ ๋ณต์žก๋„๊ฐ€ ๋‚ฎ๊ณ , ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜

๊ธฐ์ดˆ ์ž๋ฃŒ ๊ตฌ์กฐ

  • Sequence Container
    • Array
    • Linked Lists
    • Stacks
    • Queues
    • Hash Tables
  • ๊ด€๋ จ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    • ํƒ์ƒ‰
      • ์™„์ „ ํƒ์ƒ‰
      • ์ด์ง„ ํƒ์ƒ‰
    • ์ •๋ ฌ
      • bubble
      • insertion
      • selection
      • merge
      • quick
      • heap

Array (๋ฐฐ์—ด)

  • ์ •์˜
    • ๊ฐ™์€ ์ž๋ฃŒํ˜•์˜ ์›์†Œ๋“ค์„ ์ผ์ •ํ•œ ํฌ๊ธฐ์˜ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅํ•˜๊ณ , ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๊ฐ ์›์†Œ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • ์–ธ์–ด๋ณ„
    • cpp - vector, array, []
    • c [], alloc
    • python - list, []
      • ํŒŒ์ด์ฌ์—์„  ๋ฆฌ์ŠคํŠธ๋ผ๊ณ  ๋ถ€๋ฆ„
  • ์‹œ๊ฐ„ ๋ณต์žก๋„
    • ์‚ฝ์ž…
      • ๋์—์„œ๋งŒ ์‚ฝ์ž…ํ•˜๋ฉด
    • ์‚ญ์ œ
      • ๋์—์„œ๋งŒ ์‚ฝ์ž…ํ•˜๋ฉด
    • ์ ‘๊ทผ
  • ๊ณต๊ฐ„ ๋ณต์žก๋„
    • ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ธ์ ‘๋˜์–ด ์žˆ์–ด ํšจ์œจ์ด ์ข‹์Œ
  • ๋ฐฐ์—ด ์ข…๋ฅ˜
    • ํฌ๊ธฐ ๊ธฐ๋ฐ˜
      • ๊ณ ์ •
      • ๋™์ 
    • ์ฐจ์› ๊ธฐ๋ฐ˜
      • 1์ฐจ์›
      • 2์ฐจ์›
      • 3์ฐจ์›

Linked Lists (์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ)

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

Stack (์Šคํƒ)

  • ์ •์˜
    • ํ›„์ž…์„ ์ถœ(LIFO, Last-In First-Out) ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊บผ๋‚ด๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
    • ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…์€ push, ์‚ญ์ œ๋Š” pop ์—ฐ์‚ฐ์„ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง€๋ฉฐ, ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์‚ฝ์ž…๋œ ์›์†Œ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์ œ๊ฑฐ
  • ์–ธ์–ด๋ณ„
    • cpp - stack
    • python - list, []
  • ์‹œ๊ฐ„ ๋ณต์žก๋„
    • ์‚ฝ์ž…
    • ์‚ญ์ œ
    • ์ ‘๊ทผ
      • ๋งจ์œ„์˜ ์š”์†Œ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ
      • ์ค‘๊ฐ„ ์š”์†Œ์— ์ ‘๊ทผํ•˜๋ ค๋ฉด ๊บผ๋‚ด์•ผํ•œ๋‹ค
  • ๊ณต๊ฐ„ ๋ณต์žก๋„

Queue (ํ)

  • ์ •์˜
    • ์„ ์ž…์„ ์ถœ(FIFO, First-In First-Out) ๋ฐฉ์‹์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊บผ๋‚ด๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
    • ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…์€ rear(๋’ค)์—์„œ, ์‚ญ์ œ๋Š” front(์•ž)์—์„œ ์ด๋ฃจ์–ด์ง„๋‹ค
    • ์•ž๋’ค๋กœ ๋‘˜๋‹ค ์‚ฝ์ž…, ์‚ญ์ œ ํ•  ์ˆ˜ ์žˆ๋Š” Dequeue๋„ ์žˆ๋‹ค
  • ์–ธ์–ด๋ณ„
    • cpp - queue
    • python - deque
      • from collections import deque
  • ์‹œ๊ฐ„ ๋ณต์žก๋„
    • ์‚ฝ์ž… / ์‚ญ์ œ / ์ ‘๊ทผ
      • ๋’ค์—์„œ๋งŒ ๊ฐ€๋Šฅ
        • deque๋Š” ์•ž๋’ค๋กœ ๋‘˜๋‹ค ๊ฐ€๋Šฅ
  • ๊ณต๊ฐ„ ๋ณต์žก๋„
    • ๊ตฌํ˜„์— ๋”ฐ๋ผ ๋‹ค๋ฆ„
      • ๋ฐฐ์—ด ๊ธฐ๋ฐ˜ ๊ตฌํ˜„
      • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜ ๊ตฌํ˜„
      • โ€ฆ

Hash Table (ํ•ด์‰ฌ ๋งต)

  • ์ •์˜
    • {key, value}
    • ํ•ด์‹œ๋งต(Hash Map)์€ ํ‚ค(key)์™€ ๊ฐ’(value)์„ ์Œ์œผ๋กœ ์ €์žฅ
    • ํ•ด์‹œ ํ•จ์ˆ˜(hash function)๋ฅผ ์ด์šฉํ•ด ํ‚ค๋ฅผ ํ•ด์‹œ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐฐ์—ด ์ธ๋ฑ์Šค์— ๋งคํ•‘ํ•ด ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ยท์‚ฝ์ž…ยท์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
    • ํ•ด์‹ฑ
      • ํ•ด์‰ฌ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•จ์„ ๋œปํ•จ
    • ํ•ด์‹ฑ์˜ ๊ฒฐ๊ณผ ๊ฐ™์€ ํ‚ค๋กœ ๋ฐฐ์ •๋  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ฅผ ํ‚ค ์ถฉ๋Œ์ด๋ผ ๋ถ€๋ฅธ๋‹ค
      • ํ‚ค ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•๋ก 
        • ์ฒด์ด๋‹
          • ๊ฐ™์€ ํ‚ค์—๋‹ค๊ฐ€ ๋ฆฌ์ŠคํŠธ(๋ฐฐ์—ด)๋กœ ์ €์žฅ
        • ๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•
          • ๋‹ค๋ฅธ ๋นˆ ์Šฌ๋กฏ์„ ์ฐพ์•„์„œ ์ €์žฅ
        • โ€ฆ
  • ์–ธ์–ด๋ณ„
    • cpp - unordered_map, unordered_set
    • python - dict, {}
  • ์‹œ๊ฐ„ ๋ณต์žก๋„
    • ์‚ฝ์ž… / ์‚ญ์ œ / ์ ‘๊ทผ
    • ์ถฉ๋Œ์ด ๋งŽ์„ ๋•Œ์˜ ์‚ฝ์ž… / ์‚ญ์ œ / ์ ‘๊ทผ

๊ทธ๋ž˜ํ”„

  • ๊ทธ๋ž˜ํ”„

    • ๋…ธ๋“œ(์ •์ , Vertex)์™€ ๋…ธ๋“œ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ (Edge)์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ž๋ฃŒ๊ตฌ์กฐ
    • ์ข…๋ฅ˜
      • ๋ฐฉํ–ฅ์„ฑ
        • ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„
          • ๋‹จ๋ฐฉํ–ฅ
          • ์–‘๋ฐฉํ–ฅ
        • ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„
      • ์—ฐ๊ฒฐ์„ฑ
        • ์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„
        • ๋น„์—ฐ๊ฒฐ ๊ทธ๋ž˜ํ”„
      • ๊ฐ€์ค‘์น˜
        • ๊ฐ€์ค‘ ๊ทธ๋ž˜ํ”„
        • ๋น„๊ฐ€์ค‘ ๊ทธ๋ž˜ํ”„
      • ํŠน์ˆ˜ ํ˜•ํƒœ
        • ์‚ฌ์ดํด ๊ทธ๋ž˜ํ”„
        • ํŠธ๋ฆฌ
        • โ€ฆ
    • ๊ทธ๋ž˜ํ”„ ํ‘œํ˜„๋ฒ•
      • ์ธ์ ‘ ํ–‰๋ ฌ
      • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ
    • ๊ทธ๋ž˜ํ”„์—์„œ์˜ ๊ฒ€์ƒ‰
      • BFS (๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰, Breadth First Search)
      • DFS (๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰, Depth First Search)
  • ํŠธ๋ฆฌ

    • ๊ทธ๋ž˜ํ”„์˜ ํ•œ ์ข…๋ฅ˜, ์‚ฌ์ดํด์ด ์—†๋Š” ๊ฒฝ์šฐ๋ฅผ ๋œปํ•จ
    • ์ด์ง„ ํŠธ๋ฆฌ
    • ํž™
      • ์ตœ์†Œ, ์ตœ๋Œ€ ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์–ป๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ ๊ตฌ์กฐ
        • ๋กœ ๊ฐ’์„ ๊ตฌํ•จ
        • ์‚ฝ์ž…์‹œ ์œผ๋กœ ์ •๋ ฌ
      • min heap
      • max heap
    • ํŠธ๋ฆฌ์—์„œ์˜ ์ˆœํšŒ
      • Pre-Order Traversal (์ „์œ„ ์ˆœํšŒ)
        • Root Node, Left Node, Right Node
      • In-Order Traversal (์ค‘์œ„ ์ˆœํšŒ)
        • Left Node, Root Node, Right Node
      • Post-Order Traversal (ํ›„์œ„ ์ˆœํšŒ)
        • Left Node, Right Node, Root Node
  • ๊ณ ๊ธ‰

    • ํŠธ๋ผ์ด(trie)
    • ํŽœ์œ… ํŠธ๋ฆฌ(Fenwick trees, Binary Indexed Trees)
    • ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ(Segment trees)
    • Red-Black trees
    • AVL
    • B-trees
    • B+trees
    • โ€ฆ
  • Shortest Path

    • dijkstra
    • bellman-ford
    • floyd-warshall
    • A-star (A*)
    • โ€ฆ
  • Minimum Spanning Tree (MST)

    • ์ „๊ตญ์— ์ธํ„ฐ๋„ท ๋ง์„ ์ตœ์†Œ๋น„์šฉ์œผ๋กœ ๊น”๊ณ  ์‹ถ๋‹ค!
    • Prim
    • Kruskal
  • topological sorting (์œ„์ƒ ์ •๋ ฌ)

    • ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(DAG, Directed Acyclic Graph)์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ์„ ํ–‰ ๊ด€๊ณ„๋ฅผ ๋งŒ์กฑํ•˜๋„๋ก ์ผ๋ ฌ๋กœ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ
    • ํ…Œํฌ ํŠธ๋ฆฌ, ์Šคํ‚ฌ ํŠธ๋ฆฌ
      • ์ˆ˜๊ฐ• ๋น„์œ 
      • 1๋ฒˆ ์ˆ˜์—…์„ ๋“ฃ๊ธฐ ์œ„ํ•ด ์„ ํ–‰ ์ˆ˜์—… 4 or 3 ๊ฐ€ ํ•„์š”ํ•˜๋‹ค
        • ์–ด๋А ์ˆ˜์—…๋ถ€ํ„ฐ ๋“ค์–ด์•ผ ์ˆ˜์—…์„ ๋‹ค ๋“ค์„ ์ˆ˜ ์žˆ๋Š”์ง€

์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ…Œํฌ๋‹‰

  • math
  • implementation
  • sorting
  • searching
  • brute force
  • backtracking
  • greedy
  • divide and conquer
  • recursion
  • dynamic programming
  • two pointer
  • sliding window
  • dfs
  • bfs
  • prefix sum array
    • imos method
  • shortest path