๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–‹๏ธ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜/์•Œ๊ณ ๋ฆฌ์ฆ˜,์ž๋ฃŒ๊ตฌ์กฐ

[์Šคํƒ] ๋ฐฐ์—ด ๊ธฐ๋ฐ˜ ์Šคํƒ๊ณผ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜ ์Šคํƒ

by OR15A 2023. 11. 21.

Stack

  • ์Šคํƒ์€ ํ›„์ž…์„ ์ถœ์ด๋ผ๋Š” ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ ‘๊ทผํ•˜๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ
  • ์‚ฌ์šฉ ์˜ˆ์‹œ : ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ๋’ค๋กœ ๊ฐ€๊ธฐ ๊ธฐ๋Šฅ, ๋ฌธ์ž์—ด ์—ญ์ˆœ, ๊ด„ํ˜ธ ๊ฒ€์‚ฌ, ์‹คํ–‰ ์ทจ์†Œ ๊ธฐ๋Šฅ, ์žฌ๊ท€ ํ•จ์ˆ˜ ํ˜ธ์ถœ

 

 

์Šคํƒ์˜ ๊ฐœ๋…
  • ์Šคํƒ์€ LIFO(Last In, First Out) ๋˜๋Š” FILO(First In, Last Out) ์›์น™์— ๋”ฐ๋ผ ์ž‘๋™ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • ์ด ์›์น™์€ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์‚ฝ์ž…๋œ ์š”์†Œ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ์ œ๊ฑฐ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•จ

 

์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ADT(์ถ”์ƒ ๋ฐ์ดํ„ฐ ํƒ€์ž…)
Push : ์Šคํƒ์˜ ๋งจ ์œ„์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
Pop : ์Šคํƒ์˜ ๋งจ ์œ„์—์„œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๊ทธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Peek : ์Šคํƒ์˜ ๋งจ ์œ„ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ์ œ๊ฑฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
IsEmpty : ์Šคํƒ์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

 

 

๋ฐฐ์—ด ๊ธฐ๋ฐ˜ ์Šคํƒ (Stack ํด๋ž˜์Šค)

๊ตฌ์„ฑ์š”์†Œ
  • ๋‚ด๋ถ€ ๋ฐฐ์—ด : ๋™์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋  ์ˆ˜ ์žˆ๋Š” ๋ฐฐ์—ด
  • Top ํฌ์ธํ„ฐ : ์Šคํƒ์˜ ์ตœ์ƒ์œ„ ์š”์†Œ(๋งˆ์ง€๋ง‰์œผ๋กœ ์ถ”๊ฐ€๋œ ์š”์†Œ)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ๋˜๋Š” ์ธ๋ฑ์Šค
  • Capacity : ๋‚ด๋ถ€ ๋ฐฐ์—ด์˜ ์ตœ๋Œ€ ํฌ๊ธฐ
  • Size : ํ˜„์žฌ ์Šคํƒ์— ์ €์žฅ๋œ ์š”์†Œ์˜ ์ˆ˜

 

์ž‘๋™ ์›๋ฆฌ
  • ๋‚ด๋ถ€ ๋ฐฐ์—ด : Stack์€ ๋‚ด๋ถ€์ ์œผ๋กœ ๋™์  ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜์—ฌ ์š”์†Œ๋“ค์„ ์ €์žฅ. ์ด ๋ฐฐ์—ด์€ Vector ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„๋˜์–ด ์žˆ์œผ๋ฉฐ, ํ•„์š”์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์กฐ์ ˆ๋จ
  • Top ์š”์†Œ : ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์— ์žˆ๋Š” ์š”์†Œ(๊ฐ€์žฅ ์ตœ๊ทผ์— ์ถ”๊ฐ€๋œ ์š”์†Œ)๋Š” ๋‚ด๋ถ€ ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋กœ ๊ด€๋ฆฌ
  • Push ์—ฐ์‚ฐ : ์ƒˆ๋กœ์šด ์š”์†Œ๋ฅผ ์Šคํƒ์˜ ๋งจ ์œ„์— ์ถ”๊ฐ€ํ•  ๋•Œ, ์ด ์š”์†Œ๋Š” ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€. ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ฐฐ์—ด ํฌ๊ธฐ ํ™•์žฅ
  • Pop ์—ฐ์‚ฐ : ์Šคํƒ์˜ ๋งจ ์œ„์—์„œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•  ๋•Œ, ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๊ฐ€ ์ œ๊ฑฐ๋˜๊ณ  ๋ฐ˜ํ™˜๋จ
  • Peek ์—ฐ์‚ฐ : ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ์š”์†Œ๋ฅผ ํ™•์ธํ•˜๋ ค๋ฉด, ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ๋ฅผ ์กฐํšŒ

 

์ฃผ์š” ๋ฉ”์„œ๋“œ
  • push(E item) : ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€
  • pop() : ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์—์„œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๊ทธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜. ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ EmptyStackException์„ ๋˜์งˆ ์ˆ˜ ์žˆ์Œ
  • peek() : ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ์ œ๊ฑฐํ•˜์ง€ ์•Š์Œ. ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š” ๊ฒฝ์šฐ EmptyStackException์„ ๋˜์งˆ ์ˆ˜ ์žˆ์Œ
  • isEmpty() : ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜. ๋น„์–ด์žˆ์œผ๋ฉด true, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜
  • size() : ์Šคํƒ์— ์ €์žฅ๋œ ์š”์†Œ์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
  • search(Object o) : ์ง€์ •๋œ ๊ฐ์ฒด๊ฐ€ ์Šคํƒ์—์„œ ์–ผ๋งˆ๋‚˜ ๋ฉ€๋ฆฌ ์žˆ๋Š”์ง€๋ฅผ ๋ฐ˜ํ™˜. ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ๋ถ€ํ„ฐ ๊ฐ์ฒด๊นŒ์ง€์˜ ๊ฑฐ๋ฆฌ๋ฅผ 1๋กœ ์‹œ์ž‘ํ•˜์—ฌ ๊ณ„์‚ฐ. ๊ฐ์ฒด๊ฐ€ ์Šคํƒ์— ์—†์œผ๋ฉด -1์„ ๋ฐ˜ํ™˜
  • elementAt(int index) : ์Šคํƒ์—์„œ ์ง€์ •๋œ ์ธ๋ฑ์Šค์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜
  • capacity() : ์Šคํƒ์˜ ํ˜„์žฌ ์šฉ๋Ÿ‰์„ ๋ฐ˜ํ™˜. ์ด๋Š” ์Šคํƒ ๋‚ด๋ถ€์˜ ๋ฐฐ์—ด์ด ๋‹ด์„ ์ˆ˜ ์žˆ๋Š” ์š”์†Œ์˜ ์ตœ๋Œ€ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ„
  • ensureCapacity(int minCapacity) : ์Šคํƒ์ด ์ตœ์†Œํ•œ ์ง€์ •๋œ ์šฉ๋Ÿ‰์„ ๊ฐ–๋„๋ก ํ•จ
  • trimToSize() : ์Šคํƒ์˜ ์šฉ๋Ÿ‰์„ ํ˜„์žฌ ์Šคํƒ ํฌ๊ธฐ์— ๋งž๊ฒŒ ์กฐ์ •. ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ

 

 

 

 

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜ ์Šคํƒ (Deque ์ธํ„ฐํŽ˜์ด์Šค)

๊ตฌ์„ฑ์š”์†Œ
  • ๋…ธ๋“œ: ๊ฐ ์š”์†Œ๋Š” ๋…ธ๋“œ๋กœ ํ‘œํ˜„. ๋…ธ๋“œ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋‹ค์Œ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ฐธ์กฐ(ํฌ์ธํ„ฐ)๋ฅผ ํฌํ•จ
  • ํ—ค๋“œ ํฌ์ธํ„ฐ: ์Šคํƒ์˜ ์ตœ์ƒ์œ„ ์š”์†Œ(๋งจ ์ฒ˜์Œ ๋˜๋Š” ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€๋œ ์š”์†Œ)๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ
  • Size: ํ˜„์žฌ ์Šคํƒ์— ์ €์žฅ๋œ ์š”์†Œ์˜ ์ˆ˜

 

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

 

์ฃผ์š” ๋ฉ”์„œ๋“œ
  • addFirst(E item) / offerFirst(E item): ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ (ArrayDeque์—์„œ ์‚ฌ์šฉ)
  • removeFirst() / pollFirst(): ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์—์„œ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๊ทธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜
  • peekFirst(): ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ์ œ๊ฑฐํ•˜์ง€ ์•Š์Œ
  • isEmpty(): ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋ฐ˜ํ™˜. ๋น„์–ด์žˆ์œผ๋ฉด true, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜
  • size(): ์Šคํƒ์— ์ €์žฅ๋œ ์š”์†Œ์˜ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜
  • iterator() : ๋ฐํฌ์˜ ์š”์†Œ๋“ค์„ ์ˆœํšŒํ•˜๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜
  • descendingIterator() : ๋ฐํฌ์˜ ์š”์†Œ๋“ค์„ ์—ญ์ˆœ์œผ๋กœ ์ˆœํšŒํ•˜๋Š” ์ดํ„ฐ๋ ˆ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜

 

 

 

๋ฐฐ์—ด ๊ธฐ๋ฐ˜ ์Šคํƒ vs ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ๊ธฐ๋ฐ˜ ์Šคํƒ

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

 

์Šคํƒ์˜ ์žฅ์ ๊ณผ ๋‹จ์ 

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

 

 

 

์ฐธ๊ณ ์ž๋ฃŒ : ใ€Œ์‰ฝ๊ฒŒ ๋ฐฐ์šฐ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ with ์ž๋ฐ”ใ€