Home > Algorithm > 2024 > ๐Ÿ“ฆ[DS,Algorithm] ์ž๋ฃŒ๊ตฌ์กฐ ์†Œ๊ฐœ

๐Ÿ“ฆ[DS,Algorithm] ์ž๋ฃŒ๊ตฌ์กฐ ์†Œ๊ฐœ
DataStructure Algorithm

1๏ธโƒฃ ์ž๋ฃŒ๊ตฌ์กฐ(Data Structure)

์ž๋ฃŒ๊ตฌ์กฐ(Data Structure)๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ ‘๊ทผํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์ฒด๊ณ„์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ณ  ํ”„๋กœ๊ทธ๋žจ์˜ ํšจ์œจ์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ๊ฐœ๋….

์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ๋ฐฐ์—ดํ•˜๊ณ , ์ ‘๊ทผํ•˜๊ณ , ์ˆ˜์ •ํ•˜๊ณ , ์‚ญ์ œํ• ์ง€๋ฅผ ๊ทœ์ •ํ•˜๋Š” ๊ทœ์น™๊ณผ ๋ฐฉ๋ฒ•์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ๋ชฉ์ .

  1. ํšจ์œจ์ ์ธ ๋ฐ์ดํ„ฐ ์ €์žฅ ๋ฐ ์ ‘๊ทผ.
    • ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ฐ์ดํ„ฐ ์ˆ˜์ • ๋ฐ ์‚ญ์ œ ์šฉ์ด.
    • ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ˆ˜์ •ํ•˜๊ณ  ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  3. ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ตœ์ ํ™”.
    • ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ณ  ์‹คํ–‰ ์‹œ๊ฐ„์„ ๋‹จ์ถ•์‹œํ‚ต๋‹ˆ๋‹ค.

์ฃผ์š” ์ข…๋ฅ˜.

  1. ๋ฐฐ์—ด(Array)
    • ๊ณ ์ •๋œ ํฌ๊ธฐ์˜ ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
    • ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List)
    • ๊ฐ ์š”์†Œ๊ฐ€ ๋ฐ์ดํ„ฐ์™€ ๋‹ค์Œ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
    • ๋™์  ํฌ๊ธฐ ์กฐ์ ˆ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.
  3. ์Šคํƒ(Stack)
    • ํ›„์ž…์„ ์ถœ(LIFO, Last In First Out) ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” push์™€ ์‚ญ์ œํ•˜๋Š” pop ์—ฐ์‚ฐ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  4. ํ(Queue)
    • ์„ ์ž…์„ ์ถœ(FIFO, First In First Out) ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” enqueue์™€ ์‚ญ์ œํ•˜๋Š” dequeue ์—ฐ์‚ฐ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค.
  5. ํŠธ๋ฆฌ(Tree)
    • ๊ณ„์ธต์  ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋…ธ๋“œ์™€ ์—์ง€๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค.
    • ์ด์ง„ ํŠธ๋ฆฌ, ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ, AVL ํŠธ๋ฆฌ ๋“ฑ ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
  6. ๊ทธ๋ž˜ํ”„(Graph)
    • ๋…ธ๋“œ(์ •์ )์™€ ์—์ง€(๊ฐ„์„ )๋กœ ๊ตฌ์„ฑ๋œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ๋‹ค์–‘ํ•œ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„, ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  7. ํ•ด์‹œ ํ…Œ์ด๋ธ”(Hash Table)
    • ํ‚ค-๊ฐ’ ์Œ์„ ์ €์žฅํ•˜๋ฉฐ, ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ถฉ๋Œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ์ฒด์ด๋‹๊ณผ ๊ฐœ๋ฐฉ ์ฃผ์†Œ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์‘์šฉ ์‚ฌ๋ก€.

์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ์šด์˜์ฒด์ œ, ๋„คํŠธ์›Œํฌ, ์ธ๊ณต์ง€๋Šฅ, ๊ฒŒ์ž„ ๊ฐœ๋ฐœ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.
์ ์ ˆํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์„ ํƒ์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ๊ณผ ํšจ์œจ์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


2๏ธโƒฃ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋ถ„๋ฅ˜

1๏ธโƒฃ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ(Linear Data Structure)

์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ(Linear Data Structure)๋Š” ๋ฐ์ดํ„ฐ ์š”์†Œ๋“ค์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐฐ์—ด๋œ ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ๋Š” ๋ฐ์ดํ„ฐ ์š”์†Œ๋“ค์ด ์ง์„  ํ˜•ํƒœ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉฐ, ๊ฐ ์š”์†Œ๋Š” ํ•œ ๋‹ค์Œ ์š”์†Œ๋‚˜ ์ด์ „ ์š”์†Œ์™€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ฃผ์š” ํŠน์ง•์ธ ๋ฐ์ดํ„ฐ ์š”์†Œ๋“ค์ด ํ•œ ์ค„๋กœ ๋ฐฐ์—ด๋˜์–ด ์žˆ๋‹ค๋Š” ์  ์ž…๋‹ˆ๋‹ค.

์ฃผ์š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋ฅด๋Š” ๋ฐฐ์—ด, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ์Šคํƒ, ํ ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

  1. ๋ฐฐ์—ด(Array)
    • ์ •์˜ : ๋™์ผํ•œ ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ ์š”์†Œ๋“ค์ด ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์— ์ €์žฅ๋˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
    • ํŠน์ง• : ๊ณ ์ •๋œ ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง€๋ฉฐ ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ์— ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์˜ˆ์‹œ : ์ •์ˆ˜ํ˜• ๋ฐฐ์—ด, ๋ฌธ์ž์—ด ๋ฐฐ์—ด ๋“ฑ.
  2. ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ(Linked List)
    • ์ •์˜ : ๊ฐ ๋ฐ์ดํ„ฐ ์š”์†Œ๊ฐ€ ๋…ธ๋“œ๋กœ ๊ตฌ์„ฑ๋˜๊ณ , ๊ฐ ๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
    • ํŠน์ง• : ๋™์  ํฌ๊ธฐ ์กฐ์ ˆ์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ์šฉ์ดํ•˜์ง€๋งŒ, ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•œ ์ ‘๊ทผ์€ ๋ฐฐ์—ด๋ณด๋‹ค ๋Š๋ฆฝ๋‹ˆ๋‹ค.
    • ์ข…๋ฅ˜ : ๋‹จ์ผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ์›ํ˜• ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๋“ฑ.
  3. ์Šคํƒ(Stack)
    • ์ •์˜ : ํ›„์ž…์„ ์ถœ(LIFO, Last In First Out) ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
    • ํŠน์ง• : ๋ฐ์ดํ„ฐ ์‚ฝ์ž…(push)๊ณผ ์‚ญ์ œ(pop)์ด ํ•œ์ชฝ ๋์—์„œ๋งŒ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ ์‚ฌ๋ก€ : ํ•จ์ˆ˜ ํ˜ธ์ถœ ์Šคํƒ, ์—ญ์ˆœ ๋ฌธ์ž์—ด ์ฒ˜๋ฆฌ ๋“ฑ.
  4. ํ(Queue)
    • ์ •์˜ : ์„ ์ž…์„ ์ถœ(FIFO, First In First Out) ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
    • ํŠน์ง• : ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…(enqueue)์€ ํ•œ์ชฝ ๋(ํ›„๋‹จ)์—์„œ, ์‚ญ์ œ(dequeue)๋Š” ๋ฐ˜๋Œ€์ชฝ ๋(์ „๋‹จ)์—์„œ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.
    • ์ข…๋ฅ˜ : ์›ํ˜• ํ, ์šฐ์„ ์ˆœ์œ„ ํ, ๋ฑ(Deque) ๋“ฑ.
    • ์‚ฌ์šฉ ์‚ฌ๋ก€ : ์šด์˜ ์ฒด์ œ์˜ ์ž‘์—… ์Šค์ผ€์ค„๋ง, ํ”„๋ฆฐํ„ฐ ๋Œ€๊ธฐ์—ด ๋“ฑ.

์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํŠน์ง• ๋ฐ ์žฅ๋‹จ์ .

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

๋งˆ๋ฌด๋ฆฌ.

์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์ˆœ์ฐจ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์–ด ์ˆœ์ฐจ์  ์ฒ˜๋ฆฌ์— ์ ํ•ฉํ•˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์˜ ๋‹ค์–‘ํ•œ ๋ถ€๋ถ„์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ์ดˆ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.


2๏ธโƒฃ ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ(Non-linear Data Structure)

๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ(Non-linear Data Structure)๋Š” ๋ฐ์ดํ„ฐ ์š”์†Œ๋“ค์ด ๊ณ„์ธต์  ๋˜๋Š” ๊ทธ๋ฌผ ํ˜•ํƒœ๋กœ ๋ฐฐ์—ด๋œ ๊ตฌ์กฐ๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

์ด ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ๋Š” ๋ฐ์ดํ„ฐ ์š”์†Œ๋“ค์ด ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐฐ์—ด๋˜์ง€ ์•Š๊ณ , ํ•˜๋‚˜์˜ ์š”์†Œ๊ฐ€ ์—ฌ๋Ÿฌ ์š”์†Œ๋“ค๊ณผ ์—ฐ๊ฒฐ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฃผ์š” ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋กœ๋Š” ํŠธ๋ฆฌ(Tree)์™€ ๊ทธ๋ž˜ํ”„(Graph)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

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

  1. ํŠธ๋ฆฌ(Tree)
    • ์ •์˜ : ๋…ธ๋“œ์™€ ๊ทธ ๋…ธ๋“œ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ ์œผ๋กœ ๊ตฌ์„ฑ๋œ ๊ณ„์ธต์  ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ํŠธ๋ฆฌ๋Š” ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘ํ•˜์—ฌ ์ž์‹ ๋…ธ๋“œ๋กœ ๋ถ„๊ธฐํ•˜๋ฉฐ, ์‚ฌ์ดํด์ด ์—†์Šต๋‹ˆ๋‹ค.
    • ํŠน์ง• : ํŠธ๋ฆฌ๋Š” ๊ณ„์ธต์  ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๊ฐ ๋…ธ๋“œ๋Š” 0๊ฐœ ์ด์ƒ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ข…๋ฅ˜ :
      • ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree) : ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ตœ๋Œ€ ๋‘ ๊ฐœ์˜ ์ž์‹ ๋…ธ๋“œ๋ฅผ ๊ฐ€์ง€๋Š” ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.
      • ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(Binary Search Tree) : ์™ผ์ชฝ ์ž์‹์€ ๋ถ€๋ชจ๋ณด๋‹ค ์ž‘๊ณ , ์˜ค๋ฅธ์ชฝ ์ž์‹์€ ๋ถ€๋ชจ๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์ด์ง„ ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.
      • ๊ท ํ˜• ์ด์ง„ ํŠธ๋ฆฌ(Balanced Binary Tree) : AVL ํŠธ๋ฆฌ, ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ ๋“ฑ๊ณผ ๊ฐ™์ด ๋†’์ด๊ฐ€ ๊ท ํ˜•์„ ์ด๋ฃจ๋„๋ก ์œ ์ง€๋˜๋Š” ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.
      • ํž™(Heap) : ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์˜ ์ผ์ข…์œผ๋กœ, ์ตœ๋Œ€ ํž™๊ณผ ์ตœ์†Œ ํž™์ด ์žˆ์Šต๋‹ˆ๋‹ค.
      • ํŠธ๋ผ์ด(Trie) : ๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๊ณ  ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜๋Š” ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  2. ๊ทธ๋ž˜ํ”„(Graph)
    • ์ •์˜ : ์ •์ (Vertex)๋“ค๊ณผ ์ด ์ •์ ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฐ„์„ (Edge)๋“ค๋กœ ๊ตฌ์„ฑ๋œ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
    • ํŠน์ง• : ๊ทธ๋ž˜ํ”„๋Š” ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(Directed Graph)์™€ ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(Undirceted Graph)๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์‚ฌ์ดํด์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ข…๋ฅ˜ :
      • ๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(Directed Graph) : ๊ฐ„์„ ์— ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ๋Š” ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค.
      • ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„(Undirected Graph) : ๊ฐ„์„ ์— ๋ฐฉํ–ฅ์„ฑ์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค.
      • ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„(Weighted Graph) : ๊ฐ„์„ ์— ๊ฐ€์ค‘์น˜๊ฐ€ ๋ถ€์—ฌ๋œ ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค.
      • ๋น„๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„(Unweighted Graph) : ๊ฐ„์„ ์— ๊ฐ€์ค‘์น˜๊ฐ€ ์—†๋Š” ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค.

๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํŠน์ง• ๋ฐ ์žฅ๋‹จ์ .

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

๋งˆ๋ฌด๋ฆฌ.

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

์˜ˆ๋ฅผ ๋“ค์–ด, ํŒŒ์ผ ์‹œ์Šคํ…œ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค, ์†Œ์…œ ๋„คํŠธ์›Œํฌ์˜ ์‚ฌ์šฉ์ž ๊ด€๊ณ„ ๋“ฑ์ด ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜๋Š” ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.


2๏ธโƒฃ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๊ตฌํ˜„.

1๏ธโƒฃ ์ถ”์ƒ ์ž๋ฃŒํ˜•(Abstract Data Type, ADT)

์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ์˜ ์ถ”์ƒ ์ž๋ฃŒํ˜•(Abstract Data Type, ADT)์€ ๋ฐ์ดํ„ฐ์˜ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ์™€ ์ด๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ์—ฐ์‚ฐ๋“ค์„ ๋ช…ํ™•ํ•˜๊ฒŒ ์ •์˜ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค.

ADT๋Š” ๊ตฌํ˜„ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ˆจ๊ธฐ๊ณ , ๋ฐ์ดํ„ฐ์™€ ์—ฐ์‚ฐ์˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž์—๊ฒŒ ์ถ”์ƒ์ ์ธ ์ˆ˜์ค€์—์„œ ๋ฐ์ดํ„ฐ ์กฐ์ž‘์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰, ADT๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ €์žฅ๋˜๊ณ  ๊ตฌํ˜„๋˜๋Š”์ง€์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ๊ฐ์ถ”๊ณ , ๋ฐ์ดํ„ฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋งŒ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๊ฐœ๋…

  1. ์ถ”์ƒํ™”(Abstraction)
    • ADT๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ƒํ™”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์‹ค์ œ ๊ตฌํ˜„๊ณผ ๋…๋ฆฝ์ ์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
    • ์‚ฌ์šฉ์ž๋Š” ๋ฐ์ดํ„ฐ์˜ ์ €์žฅ ๋ฐฉ์‹์ด๋‚˜ ์—ฐ์‚ฐ์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ•์„ ์•Œ ํ•„์š” ์—†์ด, ADT๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ์ธํ„ฐํŽ˜์ด์Šค(Interface)
    • ADT๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ์ด๋ฅผ ๋‹ค๋ฃจ๋Š” ์—ฐ์‚ฐ๋“ค์„ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.
    • ์ž๋ฐ”์—์„œ๋Š” ์ธํ„ฐํŽ˜์ด์Šค(Interface) ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ADT์˜ ์—ฐ์‚ฐ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  3. ์บก์Šํ™”(Encapsulation)
    • ADT๋Š” ๋ฐ์ดํ„ฐ์™€ ์—ฐ์‚ฐ์„ ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ๋ฌถ์–ด ์บก์Šํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ ‘๊ทผํ•˜์ง€ ์•Š๊ณ , ์ •์˜๋œ ์—ฐ์‚ฐ์„ ํ†ตํ•ด์„œ๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

์ž๋ฐ”์—์„œ์˜ ADT ์˜ˆ์‹œ

๋‹ค์Œ์€ ์ž๋ฐ”์—์„œ ์Šคํƒ(Stack) ADT๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋Š” ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

์Šคํƒ ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜

public interface Stack<T> {
    void push(T item); // ์Šคํƒ์— ์•„์ดํ…œ์„ ์ถ”๊ฐ€
    T pop(); // ์Šคํƒ์—์„œ ์•„์ดํ…œ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜
    T peek(); // ์Šคํƒ์˜ ๋งจ ์œ„ ์•„์ดํ…œ์„ ๋ฐ˜ํ™˜(์ œ๊ฑฐํ•˜์ง€ ์•Š์Œ)
    boolean isEmpty(); // ์Šคํƒ์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
    int size(); // ์Šคํƒ์˜ ํฌ๊ธฐ ๋ฐ˜ํ™˜
}

์Šคํƒ ๊ตฌํ˜„

import java.util.ArrayList;
import java.util.List;

public class ArrayListStack<T> implements Stack<T> {
    private List<T> list = new ArrayList<>();
    
    @Override
    public void push(T item) {
        list.add(item);
    }
    
    @Override
    public T pop() {
        if (isEmpty()) {
            throw new RuntimException("Stack is empty");
        }
        return list.remove(list.size() - 1);
    }
    
    @Override
    public T peek() {
        if (isEmpty()) {
            throw new RuntimeException("Stack is empty");
        }
        return list.get(list.size() - 1);
    }
    
    @Override
    public boolean isEmpty() {
        return list.isEmpty();
    }
    
    @Override
    public int size() {
        return list.size();
    }
}

์„ค๋ช…

  • โ€˜Stack<T>โ€˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์Šคํƒ ADT์˜ ์—ฐ์‚ฐ์„ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธํ„ฐํŽ˜์ด์Šค๋Š” โ€˜pushโ€™, โ€˜popโ€™, โ€˜peekโ€™, โ€˜isEmptyโ€™, โ€˜sizeโ€™ ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

  • โ€˜ArrayListStack<T>โ€˜ ํด๋ž˜์Šค๋Š” โ€˜Stack<T>โ€˜ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์ด ํด๋ž˜์Šค๋Š” โ€˜ArrayListโ€™ ๋ฅผ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํƒ ์—ฐ์‚ฐ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค.
  • โ€˜pushโ€™ ๋ฉ”์„œ๋“œ๋Š” ์Šคํƒ์— ์•„์ดํ…œ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • โ€˜popโ€™ ๋ฉ”์„œ๋“œ๋Š” ์Šคํƒ์—์„œ ๋งจ ์œ„์˜ ์•„์ดํ…œ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • โ€˜peekโ€™ ๋ฉ”์„œ๋“œ๋Š” ์Šคํƒ์˜ ๋งจ ์œ„ ์•„์ดํ…œ์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • โ€˜isEmptyโ€™ ๋ฉ”์„œ๋“œ๋Š” ์Šคํƒ์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  • โ€˜sizeโ€™ ๋ฉ”์„œ๋“œ๋Š” ์Šคํƒ์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์ด ์˜ˆ์‹œ์—์„œ โ€˜Stack<T>โ€˜ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ์Šคํƒ ADT๋ฅผ ์ •์˜ํ•˜๊ณ , โ€˜ArrayListStack<T>โ€˜ ํด๋ž˜์Šค๋Š” ์ด ADT๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž๋Š” โ€˜ArrayListStackโ€™ ์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์„ ์•Œ ํ•„์š” ์—†์ด โ€˜Stackโ€™ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด ์Šคํƒ ์—ฐ์‚ฐ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Š” ADT์˜ ์ฃผ์š” ์žฅ์  ์ค‘ ํ•˜๋‚˜์ธ ๊ตฌํ˜„์˜ ๋…๋ฆฝ์„ฑ์„ ์ž˜ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.