๐Ÿ“š ์•Œ๊ณ ๋ฆฌ์ฆ˜&์ž๋ฃŒ๊ตฌ์กฐ Intro

Wol-danยท2021๋…„ 9์›” 15์ผ
0
post-thumbnail

์ž๋ฃŒ๊ตฌ์กฐ(Data Structure)

๋ฐ์ดํ„ฐ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ํšจ์œจ์ ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๊ณ  ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์˜๋ฏธํ•œ๋‹ค. ๋ฐ์ดํ„ฐ ํŠน์„ฑ์— ๋งž๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์„ ํƒํ•˜๋Š” ์ผ์€ ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์œ„ํ•ด์„œ ํ•„์ˆ˜์ ์ธ ์ผ์ด๋‹ค.

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

์ž๋ฃŒ๊ตฌ์กฐ ๊ณต๋ถ€๋ฐฉํ–ฅ

  • Order ์ž๋ฃŒ ๊ตฌ์กฐ ์•ˆ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์˜ ์ˆœ์„œ๊ฐ€ ๋ณด์žฅ๋˜๋Š”์ง€
  • Unique ์ค‘๋ณต๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š”์ง€
  • Search ๊ฒ€์ƒ‰ํ•  ๋•Œ ์–ผ๋งˆ๋‚˜ ํšจ์œจ์ ์ธ์ง€
  • Modification ์ˆ˜์ •ํ•  ๋•Œ ์–ผ๋งˆ๋‚˜ ํšจ์œจ์ ์ธ์ง€
  • ์‹œ๊ฐ„์ด ์—†๋‹ค๋ฉด ๊ตฌํ˜„๋ฐฉ๋ฒ•, ์‚ฌํ•ญ์„ ์ผ์ผ์ด ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค๋Š”, ํ•ด๋‹น ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์–ด๋–ค ์ƒํ™ฉ์— ์“ฐ๋Š” ๊ฒƒ์ด ์ข‹๊ณ  ์–ด๋–ค API ๋“ค์ด ์žˆ๋Š”์ง€ ์œ„์ฃผ๋กœ ๊ณต๋ถ€ํ•˜๋ฉด ์ข‹์Œ.

์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ข…๋ฅ˜

1. ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ

์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์„ ์ฒ˜๋Ÿผ ๊ธธ๊ฒŒ ๋‚˜์—ด๋œ ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

  1. ๋žœ๋ค ์ ‘๊ทผ ๊ฐ€๋Šฅ: ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— O(1)๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
  • ๋ฐฐ์—ด(Array)
  • ํ•ด์‹œ(Hash)
    • ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table)
    • ํ•ด์‹œํ•จ์ˆ˜์— ํ‚ค๊ฐ’์„ ๋„ฃ์–ด ์ฃผ์†Œ๊ฐ’์„ ์–ป๊ณ  ๊ทธ ์ฃผ์†Œ์— ์œ„์น˜ํ•œ ๋ฒ„ํ‚ท์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ์‹
    • ํ•ญ์ƒ O(1)์ด ๋ณด์žฅ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  1. ๋žœ๋ค ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ: ๋ชจ๋“  ๋ฐ์ดํ„ฐ์— O(1)๋กœ ์ ‘๊ทผ์ด ๋ณด์žฅ๋˜์ง€ ์•Š๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ ํƒ์ƒ‰๋ฒ•

  • ์ˆœ์ฐจ ํƒ์ƒ‰
  • ์ด๋ถ„ ํƒ์ƒ‰

2. ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ

๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์•„๋‹Œ ๋ชจ๋“  ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

๊ทธ๋ž˜ํ”„ ์ˆœํšŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)
  • ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS)

ํŠธ๋ฆฌ ์ˆœํšŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ์ „์œ„ ์ˆœํšŒ(preorder)
  • ์ค‘์œ„ ์ˆœํšŒ(inorder)
  • ํ›„์œ„ ์ˆœํšŒ(postorder)
  • ๋ ˆ๋ฒจ ์ˆœ์„œ ์ˆœํšŒ(levelorder)

๊ทธ ์™ธ

๊ธฐํƒ€

Ref

์•Œ๊ณ ๋ฆฌ์ฆ˜(Algorithm)

์ œํ•œ๋œ ๊ณต๊ฐ„๊ณผ ์‹œ๊ฐ„ ์•ˆ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์ •ํ•ด๋†“์€ ๋กœ์ง(์ฃผ์–ด์ง„ ์ธํ’‹์œผ๋กœ ์ •์˜๋œ ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•œ ๋’ค ์•„์›ƒํ’‹์„ ๋‚ด๋Š” ๊ฒƒ์„ ๋งํ•จ)

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋ฐฉํ–ฅ

  • ์ธํ’‹ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ปค์งˆ์ˆ˜๋ก Big O๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”ํ•˜๋Š”์ง€
  • ์‹œ๊ฐ„ ๋ณต์žก๋„, ๊ณต๊ฐ„ ๋ณต์žก๋„ ๊ณ ๋ ค
  • ์–ด๋–ค ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„์ง€
  • ์ตœ์ข…์ ์œผ๋กœ ์ž‘์€ ๊ณต๊ฐ„๊ณผ ๋น ๋ฅธ ์‹œ๊ฐ„์•ˆ์— ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ
  • ์ž๋™์™„์„ฑ, ๋ณต๋ถ™ ์‚ฌ์šฉ์„ ์ตœ์†Œํ™”ํ•  ๊ฒƒ
  • ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ’€์ด์— ์‚ฌ์šฉํ•˜๋Š” ์–ธ์–ด๋ฅผ ์ดํ•ดํ•˜๋ ค๊ณ ํ•  ๊ฒƒ
  • ์ถฉ๋ถ„ํ•œ ๊ณ ๋ฏผ & ๋ฌธ์ œ์— ๋Œ€ํ•œ ์ดํ•ด/ํ’€์ด ์•„์ด๋””์–ด, ์–ด๋ ค์› ๋˜ ์  ๋ฐ ํ•ด๊ฒฐ์ฑ… ์ƒ๊ฐํ•  ๊ฒƒ

์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ข…๋ฅ˜

ํƒ์ƒ‰(Search)

์ •๋ ฌ(Sorting)

๋ถ„ํ•  ์ •๋ณต(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

profile
์ •๋ฆฌํ•˜๊ณ  ๋ชจ์œผ๊ณ  ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ํ•˜๋Š” ๊ฑธ ์ข‹์•„ํ•˜๋Š” ์ƒˆ์‹น ์›น ๊ฐœ๋ฐœ์ž๐ŸŒฑ

0๊ฐœ์˜ ๋Œ“๊ธ€