๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜/์ž๋ฃŒ๊ตฌ์กฐ ์ด๋ก 

์ž๋ฃŒ๊ตฌ์กฐ ๋ชฉ๋ก (+java์—์„œ์˜ ์‚ฌ์šฉ)

by sh119 2024. 6. 25.

์ž๋ฃŒ๊ตฌ์กฐ์—๋Š” ํฌ๊ฒŒ ์„ ํ˜•์ž๋ฃŒ๊ตฌ์กฐ์™€ ๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์žˆ์œผ๋ฉฐ ์•„๋ž˜๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋“ค์˜ ๊ฐ„๋žตํ•œ ์„ค๋ช…์ด๋‹ค.

๊ฐ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ž์„ธํ•œ ์„ค๋ช…์€ ํ•ด๋‹น ๋ธ”๋กœ๊ทธ ๋‹ค๋ฅธ๊ธ€์— ์„œ์ˆ  ๋˜์–ด์žˆ๋‹ค. 

 

๐Ÿ’ซ๊ธฐ๋ณธ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ ๋ชจ์Œ

1. ๋ฐฐ์—ด(Array)

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

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

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

3. ์Šคํƒ(Stack)

  • ์„ค๋ช…: ํ›„์ž…์„ ์ถœ(LIFO, Last In First Out) ์›์น™์„ ๋”ฐ๋ฅด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•: ์š”์†Œ ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ O(1) ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง, ์ฃผ๋กœ ์žฌ๊ท€์ ์ธ ๋ฌธ์ œ ํ•ด๊ฒฐ์— ์‚ฌ์šฉ๋จ.
  • ์‚ฌ์šฉ ์˜ˆ: ํ•จ์ˆ˜ ํ˜ธ์ถœ ์Šคํƒ, ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ• ๊ณ„์‚ฐ๊ธฐ.

4. ํ(Queue)

  • ์„ค๋ช…: ์„ ์ž…์„ ์ถœ(FIFO, First In First Out) ์›์น™์„ ๋”ฐ๋ฅด๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•: ์š”์†Œ ์ถ”๊ฐ€/์‚ญ์ œ๊ฐ€ O(1) ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง, ์ˆœ์ฐจ์ ์ธ ์ž‘์—… ์ฒ˜๋ฆฌ์— ์ ํ•ฉ.
  • ์‚ฌ์šฉ ์˜ˆ: ํ”„๋ฆฐํ„ฐ ์ž‘์—… ๋Œ€๊ธฐ์—ด, ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(BFS).

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

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

6. ํŠธ๋ฆฌ(Tree)

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

6.1. ์ด์ง„ ํŠธ๋ฆฌ(Binary Tree)

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

6.2. ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ(Binary Search Tree, BST)

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

6.3. ํž™(Heap)

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

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

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

8. ํŠธ๋ผ์ด(Trie)

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

๐Ÿ’ซ์ด์™ธ์˜ ๋งŽ์ด ์“ฐ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ ๋ชจ์Œ

1. ๋ฑ(Deque)

  • ์„ค๋ช…: ์–‘์ชฝ ๋์—์„œ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๋ชจ๋‘ ๊ฐ€๋Šฅํ•œ ํ์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•: ์ด์ค‘ ๋ ํ๋กœ, ์•ž๊ณผ ๋’ค์—์„œ O(1) ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅ.
  • ์‚ฌ์šฉ ์˜ˆ: ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ํšŒ์ „ํ•˜๋Š” ํ.

2. ์šฐ์„ ์ˆœ์œ„ ํ(Priority Queue)

  • ์„ค๋ช…: ๊ฐ ์š”์†Œ๊ฐ€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง€๋ฉฐ, ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๊ฐ€์ง„ ์š”์†Œ๊ฐ€ ๋จผ์ € ์ฒ˜๋ฆฌ๋˜๋Š” ํ์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•: ํž™์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์œผ๋ฉฐ, ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ O(log n) ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง.
  • ์‚ฌ์šฉ ์˜ˆ: ์ž‘์—… ์Šค์ผ€์ค„๋ง, ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜.

3. ์ง‘ํ•ฉ(Set)

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

4. ๋งต(Map) ๋˜๋Š” ์‚ฌ์ „(Dictionary)

  • ์„ค๋ช…: ํ‚ค-๊ฐ’ ์Œ์„ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ๊ฐ ํ‚ค๋Š” ์œ ์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ํŠน์ง•: ๋ณดํ†ต ํ•ด์‹œ ํ…Œ์ด๋ธ”์ด๋‚˜ ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋˜๋ฉฐ, ํ‚ค๋ฅผ ์ด์šฉํ•œ ๋น ๋ฅธ ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅ.
  • ์‚ฌ์šฉ ์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค, ์บ์‹œ, ํ‚ค-๊ฐ’ ์ €์žฅ์†Œ.

5. ๊ทธ๋ž˜ํ”„(Graph)์˜ ํŠน์ˆ˜ ํ˜•ํƒœ

5.1. ๋ฐฉํ–ฅ์„ฑ ๋น„์ˆœํ™˜ ๊ทธ๋ž˜ํ”„(DAG, Directed Acyclic Graph)

  • ์„ค๋ช…: ๋ฐฉํ–ฅ์„ฑ์ด ์žˆ์œผ๋ฉฐ ์ˆœํ™˜์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•: ์œ„์ƒ ์ •๋ ฌ์ด ๊ฐ€๋Šฅ, ์ข…์†์„ฑ ๊ด€๋ฆฌ์— ์œ ์šฉ.
  • ์‚ฌ์šฉ ์˜ˆ: ์ž‘์—… ์Šค์ผ€์ค„๋ง, ์ปดํŒŒ์ผ๋Ÿฌ ์ตœ์ ํ™”.

5.2. ๊ฐ€์ค‘์น˜ ๊ทธ๋ž˜ํ”„(Weighted Graph)

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

6. B-ํŠธ๋ฆฌ ๋ฐ ๋ณ€ํ˜•

6.1. B-ํŠธ๋ฆฌ(B-Tree)

  • ์„ค๋ช…: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๋Š” ์ž๊ฐ€ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ์˜ ์ผ๋ฐ˜ํ™”์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•: ๋…ธ๋“œ ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ ํ‚ค๋ฅผ ์ €์žฅ, ๋†’์ด๊ฐ€ ๋‚ฎ์•„ ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ํšจ์œจ์ .
  • ์‚ฌ์šฉ ์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค, ํŒŒ์ผ ์‹œ์Šคํ…œ.

6.2. B+ํŠธ๋ฆฌ(B+ Tree)

  • ์„ค๋ช…: B-ํŠธ๋ฆฌ์˜ ๋ณ€ํ˜•์œผ๋กœ, ๋ฆฌํ”„ ๋…ธ๋“œ๊ฐ€ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋กœ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํŠน์ง•: ๋ฒ”์œ„ ์ฟผ๋ฆฌ ์ˆ˜ํ–‰์— ํšจ์œจ์ .
  • ์‚ฌ์šฉ ์˜ˆ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ธ๋ฑ์Šค.

7. ํ”ผ๋ณด๋‚˜์น˜ ํž™(Fibonacci Heap)

  • ์„ค๋ช…: ๋ณต์žกํ•œ ์šฐ์„ ์ˆœ์œ„ ํ ์—ฐ์‚ฐ์„ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ํž™์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•: ์‚ฝ์ž…๊ณผ ํ‚ค ๊ฐ์†Œ๊ฐ€ ๋งค์šฐ ๋น ๋ฆ„, ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์—์„œ ์‚ฌ์šฉ.
  • ์‚ฌ์šฉ ์˜ˆ: ๊ทธ๋ž˜ํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ ๊ณ„์‚ฐ.

8. AVL ํŠธ๋ฆฌ

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

9. ๋ ˆ๋“œ-๋ธ”๋ž™ ํŠธ๋ฆฌ(Red-Black Tree)

  • ์„ค๋ช…: ์ž๊ฐ€ ๊ท ํ˜• ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋กœ, ๊ฐ ๋…ธ๋“œ๊ฐ€ ๋นจ๊ฐ• ๋˜๋Š” ๊ฒ€์ •์œผ๋กœ ์ƒ‰์น ๋ฉ๋‹ˆ๋‹ค.
  • ํŠน์ง•: ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ O(log n) ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ€์ง, ๊ท ํ˜• ์œ ์ง€.
  • ์‚ฌ์šฉ ์˜ˆ: ๋งต๊ณผ ์„ธํŠธ์˜ ๋‚ด๋ถ€ ๊ตฌํ˜„.

10. ์„ธ๊ทธ๋จผํŠธ ํŠธ๋ฆฌ(Segment Tree)

  • ์„ค๋ช…: ํŠน์ • ๋ฒ”์œ„์˜ ์ฟผ๋ฆฌ์™€ ์—…๋ฐ์ดํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค.
  • ํŠน์ง•: ๊ตฌ๊ฐ„ ํ•ฉ, ์ตœ๋Œ“๊ฐ’, ์ตœ์†Ÿ๊ฐ’ ๋“ฑ์˜ ์ฟผ๋ฆฌ๋ฅผ O(log n) ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ์ฒ˜๋ฆฌ.
  • ์‚ฌ์šฉ ์˜ˆ: ๋ฒ”์œ„ ์ฟผ๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ๋ฌธ์ œ.

11. ํŽœ์œ… ํŠธ๋ฆฌ(Fenwick Tree)

  • ์„ค๋ช…: ์ด์ง„ ์ธ๋ฑ์Šค ํŠธ๋ฆฌ๋กœ, ๋ถ€๋ถ„ ํ•ฉ ์ฟผ๋ฆฌ์™€ ์—…๋ฐ์ดํŠธ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰.
  • ํŠน์ง•: ๊ตฌ๊ฐ„ ํ•ฉ ์ฟผ๋ฆฌ์™€ ์—…๋ฐ์ดํŠธ๋ฅผ O(log n) ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ์ฒ˜๋ฆฌ.
  • ์‚ฌ์šฉ ์˜ˆ: ์ฃผ์‹ ๊ฑฐ๋ž˜ ์‹œ์Šคํ…œ, ๊ตฌ๊ฐ„ ํ•ฉ ๋ฌธ์ œ.

๐Ÿ’ซ Java์—์„œ์˜ ์ž๋ฃŒ๊ตฌ์กฐ ์‚ฌ์šฉ

์ž๋ฐ”์—์„œ๋Š” Java Collections Framework๋ฅผ ํ†ตํ•ด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

1. ๋ฐฐ์—ด (Array)

  • ํŠน์ง•: ๊ณ ์ • ํฌ๊ธฐ, ์ธ๋ฑ์Šค๋ฅผ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ์ ‘๊ทผ ๊ฐ€๋Šฅ.
  • ๋ฉ”์„œ๋“œ:
    • int[] array = new int[10]; // ๋ฐฐ์—ด ์„ ์–ธ ๋ฐ ์ƒ์„ฑ
    • array.length // ๋ฐฐ์—ด์˜ ๊ธธ์ด

2. List (ArrayList)

  • ํŠน์ง•: ๋™์  ๋ฐฐ์—ด, ํฌ๊ธฐ ์ž๋™ ์กฐ์ ˆ. / ์ˆœ์„œ ์žˆ์Œ, ์ค‘๋ณต๋œ ์š”์†Œ ํ—ˆ์šฉ
  • ๋ฉ”์„œ๋“œ:
    • add(E e): ๋ฆฌ์ŠคํŠธ์˜ ๋์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€
    • add(int index, E element): ์ง€์ •๋œ ์œ„์น˜์— ์š”์†Œ๋ฅผ ์‚ฝ์ž…
    • get(int index): ์ง€์ •๋œ ์œ„์น˜์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜
    • remove(int index): ์ง€์ •๋œ ์œ„์น˜์˜ ์š”์†Œ๋ฅผ ์ œ๊ฑฐ
    • set(int index, E element): ์ง€์ •๋œ ์œ„์น˜์˜ ์š”์†Œ๋ฅผ ์ง€์ •๋œ ์š”์†Œ๋กœ ๋ฐ”๊ฟˆ
    • contains(Object o): ๋ฆฌ์ŠคํŠธ์— ํŠน์ • ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
    • indexOf(Object o): ๋ฆฌ์ŠคํŠธ์—์„œ ํŠน์ • ์š”์†Œ์˜ ์ฒซ ๋ฒˆ์งธ ๋ฐœ์ƒ ์œ„์น˜๋ฅผ ๋ฐ˜ํ™˜
    • size(): ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
    • clear(): ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ œ๊ฑฐ
    • subList(int fromIndex, int toIndex): ๋ฆฌ์ŠคํŠธ์˜ ํŠน์ • ๋ฒ”์œ„์˜ ์š”์†Œ๋“ค๋กœ ์ƒˆ๋กœ์šด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜ํ™˜

3. LinkedList

  • ํŠน์ง•: ์–‘๋ฐฉํ–ฅ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ์š”์†Œ ์‚ฝ์ž…/์‚ญ์ œ๊ฐ€ ์šฉ์ด.
  • ๋ฉ”์„œ๋“œ:
    • add(E e) // ์š”์†Œ ์ถ”๊ฐ€
    • addFirst(E e) // ์ฒซ ๋ฒˆ์งธ ์œ„์น˜์— ์š”์†Œ ์ถ”๊ฐ€
    • addLast(E e) // ๋งˆ์ง€๋ง‰ ์œ„์น˜์— ์š”์†Œ ์ถ”๊ฐ€
    • remove(int index) // ํŠน์ • ์ธ๋ฑ์Šค์˜ ์š”์†Œ ์ œ๊ฑฐ
    • removeFirst() // ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ์ œ๊ฑฐ
    • removeLast() // ๋งˆ์ง€๋ง‰ ์š”์†Œ ์ œ๊ฑฐ
    • get(int index) // ํŠน์ • ์ธ๋ฑ์Šค์˜ ์š”์†Œ ๋ฐ˜ํ™˜
    • getFirst() // ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ๋ฐ˜ํ™˜
    • getLast() // ๋งˆ์ง€๋ง‰ ์š”์†Œ ๋ฐ˜ํ™˜
    • size() // ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ ๋ฐ˜ํ™˜
    • clear() // ๋ชจ๋“  ์š”์†Œ ์ œ๊ฑฐ
    • contains(Object o) // ํŠน์ • ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ

4. Stack

  • ํŠน์ง•: ํ›„์ž…์„ ์ถœ (LIFO).
  • ๋ฉ”์„œ๋“œ:
    • push(E item) // ์š”์†Œ ์ถ”๊ฐ€
    • pop() // ๋งจ ์œ„์˜ ์š”์†Œ ์ œ๊ฑฐ ๋ฐ ๋ฐ˜ํ™˜
    • peek() // ๋งจ ์œ„์˜ ์š”์†Œ ๋ฐ˜ํ™˜
    • isEmpty() // ์Šคํƒ์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
    • search(Object o) // ํŠน์ • ์š”์†Œ์˜ ์œ„์น˜ ๋ฐ˜ํ™˜

5. Queue (LinkedList๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„)

  • ํŠน์ง•: ์„ ์ž…์„ ์ถœ (FIFO).
  • ๋ฉ”์„œ๋“œ:
    • add(E e) // ์š”์†Œ ์ถ”๊ฐ€ (์˜ˆ์™ธ ๋ฐœ์ƒ)
    • offer(E e) // ์š”์†Œ ์ถ”๊ฐ€ (์„ฑ๊ณต ์—ฌ๋ถ€ ๋ฐ˜ํ™˜)
    • remove() // ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ์ œ๊ฑฐ ๋ฐ ๋ฐ˜ํ™˜ (์˜ˆ์™ธ ๋ฐœ์ƒ)
    • poll() // ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ์ œ๊ฑฐ ๋ฐ ๋ฐ˜ํ™˜ (์—†์œผ๋ฉด null ๋ฐ˜ํ™˜)
    • element() // ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ๋ฐ˜ํ™˜ (์˜ˆ์™ธ ๋ฐœ์ƒ)
    • peek() // ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ๋ฐ˜ํ™˜ (์—†์œผ๋ฉด null ๋ฐ˜ํ™˜)
    • isEmpty() // ํ๊ฐ€ ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
    • size() // ํ์˜ ํฌ๊ธฐ ๋ฐ˜ํ™˜

6. HashMap

  • ํŠน์ง•: ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ์ €์žฅ, ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋น ๋ฅธ ๊ฒ€์ƒ‰.
  • ๋ฉ”์„œ๋“œ:
    • put(K key, V value) // ํ‚ค-๊ฐ’ ์Œ ์ถ”๊ฐ€
    • get(Object key) // ํŠน์ • ํ‚ค์˜ ๊ฐ’ ๋ฐ˜ํ™˜
    • remove(Object key) // ํŠน์ • ํ‚ค์˜ ๊ฐ’ ์ œ๊ฑฐ
    • containsKey(Object key) // ํŠน์ • ํ‚ค๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
    • containsValue(Object value) // ํŠน์ • ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
    • size() // ๋งต์˜ ํฌ๊ธฐ ๋ฐ˜ํ™˜
    • clear() // ๋ชจ๋“  ์š”์†Œ ์ œ๊ฑฐ
    • keySet() // ๋ชจ๋“  ํ‚ค (Set)๋ฐ˜ํ™˜
    • values() // ๋ชจ๋“  ๊ฐ’ (Collection)๋ฐ˜ํ™˜
    • entrySet() // ๋ชจ๋“  ํ‚ค-๊ฐ’ ์Œ (Set)๋ฐ˜ํ™˜

 

7. TreeMap

  • ํŠน์ง•: ํ‚ค-๊ฐ’ ์Œ์œผ๋กœ ์ €์žฅ, ํ‚ค๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์ €์žฅ.
  • ๋ฉ”์„œ๋“œ:
    • put(K key, V value) // ํ‚ค-๊ฐ’ ์Œ ์ถ”๊ฐ€
    • get(Object key) // ํŠน์ • ํ‚ค์˜ ๊ฐ’ ๋ฐ˜ํ™˜
    • remove(Object key) // ํŠน์ • ํ‚ค์˜ ๊ฐ’ ์ œ๊ฑฐ
    • containsKey(Object key) // ํŠน์ • ํ‚ค๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
    • containsValue(Object value) // ํŠน์ • ๊ฐ’์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
    • size() // ๋งต์˜ ํฌ๊ธฐ ๋ฐ˜ํ™˜
    • clear() // ๋ชจ๋“  ์š”์†Œ ์ œ๊ฑฐ
    • firstKey() // ์ฒซ ๋ฒˆ์งธ ํ‚ค ๋ฐ˜ํ™˜
    • lastKey() // ๋งˆ์ง€๋ง‰ ํ‚ค ๋ฐ˜ํ™˜
    • keySet() // ๋ชจ๋“  ํ‚ค ๋ฐ˜ํ™˜
    • values() // ๋ชจ๋“  ๊ฐ’ ๋ฐ˜ํ™˜
    • entrySet() // ๋ชจ๋“  ํ‚ค-๊ฐ’ ์Œ ๋ฐ˜ํ™˜

8. HashSet

  • ํŠน์ง•: ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์š”์†Œ๋“ค์˜ ์ง‘ํ•ฉ, ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๋น ๋ฅธ ๊ฒ€์ƒ‰.
  • ๋ฉ”์„œ๋“œ:
    • add(E e) // ์š”์†Œ ์ถ”๊ฐ€
    • remove(Object o) // ํŠน์ • ์š”์†Œ ์ œ๊ฑฐ
    • contains(Object o) // ํŠน์ • ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
    • size() // ์ง‘ํ•ฉ์˜ ํฌ๊ธฐ ๋ฐ˜ํ™˜
    • clear() // ๋ชจ๋“  ์š”์†Œ ์ œ๊ฑฐ
    • isEmpty() // ์ง‘ํ•ฉ์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
// Set -> ๋ฐฐ์—ด
Integer[] arr = set.toArray(new Integer[0]); // 0์„ ์ž…๋ ฅํ•˜๋ฉด arr์˜ ํฌ๊ธฐ๋ฅผ ์ž๋™์œผ๋กœ ์ง€์ •ํ•ด์ค€๋‹ค

 

9. TreeSet

  • ํŠน์ง•: ์ค‘๋ณต๋˜์ง€ ์•Š๋Š” ์š”์†Œ๋“ค์˜ ์ง‘ํ•ฉ, ์ •๋ ฌ๋œ ์ƒํƒœ๋กœ ์ €์žฅ.
  • ๋ฉ”์„œ๋“œ:
    • add(E e) // ์š”์†Œ ์ถ”๊ฐ€
    • remove(Object o) // ํŠน์ • ์š”์†Œ ์ œ๊ฑฐ
    • contains(Object o) // ํŠน์ • ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
    • size() // ์ง‘ํ•ฉ์˜ ํฌ๊ธฐ ๋ฐ˜ํ™˜
    • clear() // ๋ชจ๋“  ์š”์†Œ ์ œ๊ฑฐ
    • isEmpty() // ์ง‘ํ•ฉ์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธ
    • first() // ์ฒซ ๋ฒˆ์งธ ์š”์†Œ ๋ฐ˜ํ™˜
    • last() // ๋งˆ์ง€๋ง‰ ์š”์†Œ ๋ฐ˜ํ™˜
    • headSet(E toElement) // ํŠน์ • ์š”์†Œ๋ณด๋‹ค ์ž‘์€ ๋ชจ๋“  ์š”์†Œ ๋ฐ˜ํ™˜
    • tailSet(E fromElement) // ํŠน์ • ์š”์†Œ๋ณด๋‹ค ํฐ ๋ชจ๋“  ์š”์†Œ ๋ฐ˜ํ™˜