๐Ÿ’ป Knowledge/์ž๋ฃŒ๊ตฌ์กฐ

Stack์ด ๋ฌด์—‡์ด๊ณ  ์–ด๋–ค ๊ฒฝ์šฐ์— ์‚ฌ์šฉ๋ ๊นŒ?

ming412 2023. 9. 26. 10:58

Stack์ด๋ž€

Stack

- Stack์€ LIFO(Last In First Out) ์›์น™์— ๊ธฐ๋ฐ˜ํ•œ ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ์ด๋‹ค.

 

LIFO๋ž€?
๊ฐ€์žฅ ์ตœ๊ทผ์— ์ถ”๊ฐ€๋œ ํ•ญ๋ชฉ์ด ๊ฐ€์žฅ ๋จผ์ € ์ œ๊ฑฐ๋˜๋Š” ์ˆœ์„œ๋ฅผ ๋”ฐ๋ฅธ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

Stack์˜ ์ฃผ์š” ์—ฐ์‚ฐ

- push(e): ํŠน์ • ์š”์†Œ๋ฅผ ์Šคํƒ์— ์ถ”๊ฐ€

- pop(): ์Šคํƒ์˜ ๋งจ ์œ„์— ์žˆ๋Š” ํ•ญ๋ชฉ(top)์„ ์ œ๊ฑฐํ•˜๊ณ , ํ•ด๋‹น ์›์†Œ๋ฅผ ๋ฐ˜ํ™˜

- peek(): ์Šคํƒ์˜ ๋งจ ์œ„์— ์žˆ๋Š” ํ•ญ๋ชฉ(top)์„ ๋ฐ˜ํ™˜ (์ œ๊ฑฐX)

- isEmpty(): ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ

 

Stack์˜ ์‚ฌ์šฉ ์‚ฌ๋ก€

- Undo(์‹คํ–‰ ์ทจ์†Œ) / Redo(๋‹ค์‹œ ์‹คํ–‰)

Undo์™€ Redo ๊ธฐ๋Šฅ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ฃผ๋กœ ๋‘ ๊ฐœ์˜ ์Šคํƒ(Stack)์„ ์‚ฌ์šฉํ•œ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ A, B, C, D ์ˆœ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค๋ฉด,
Undo Stack = [A, B, C, D], Redo Stack = []

์ด ์ƒํƒœ์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ Undo๋ฅผ ํด๋ฆญํ•˜๋ฉด, D ์ž‘์—…์ด ์ˆ˜ํ–‰๋œ๋‹ค. (Redo Stack์— ์ถ”๊ฐ€)
Undo Stack = [A, B, C], Redo Stack = [D]

ํ•œ๋ฒˆ ๋” Undo๋ฅผ ํด๋ฆญํ•˜๋ฉด, C ์ž‘์—…์ด ์ˆ˜ํ–‰๋œ๋‹ค. (Redo Stack์— ์ถ”๊ฐ€)
Undo Stack = [A, B], Redo Stack = [D, C]

์ด ์ƒํƒœ์—์„œ Redo๋ฅผ ํด๋ฆญํ•˜๋ฉด, C ์ž‘์—…์ด ์ˆ˜ํ–‰๋œ๋‹ค. (Undo Stack์— ์ถ”๊ฐ€)
Undo Stack = [A, B, C], Redo Stack = [D]

 

- ํ”„๋กœ๊ทธ๋žจ์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ด€๋ฆฌ

OS๋Š” ํ•จ์ˆ˜(๋ฉ”์„œ๋“œ)๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ์Šคํƒ์„ ์‚ฌ์šฉํ•œ๋‹ค.

์ด๋ฅผ ํ˜ธ์ถœ ์Šคํƒ(Call Stack)์ด๋ผ๊ณ  ํ•˜๋ฉฐ, ํ•จ์ˆ˜ ํ˜ธ์ถœ๊ณผ ๋ฐ˜ํ™˜์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

 

- ๊ทธ ์™ธ

๋ฌธ์ž์—ด ์—ญ์ˆœ์œผ๋กœ ๋ฐ”๊พธ๊ธฐ, ๊ด„ํ˜ธ์˜ ์ง ํ™•์ธํ•˜๊ธฐ, ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ• ๋ณ€ํ™˜ํ•˜๊ธฐ ๋“ฑ์— ํ™œ์šฉ๋œ๋‹ค.

 

Stack์˜ ์žฅ์ 

1. ์ƒ์ˆ˜ ์‹œ๊ฐ„์˜ ๊ธฐ๋ณธ ์—ฐ์‚ฐ

์Šคํƒ์˜ ๊ธฐ๋ณธ ์—ฐ์‚ฐ(push, pop, peek ๋“ฑ)์€ O(1), ์ฆ‰ ์ƒ์ˆ˜ ์‹œ๊ฐ„์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

์ด๋Š” Stack์˜ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…/์‚ญ์ œ/์ ‘๊ทผํ•˜๋Š”๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์ด ์ผ์ •ํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

 

2. ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ

์Šคํƒ์€ ๋™์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋  ์ˆ˜ ์žˆ์–ด ํ•„์š”ํ•œ ๋งŒํผ์˜ ๋ฉ”๋ชจ๋ฆฌ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

3. LIFO ํŠน์„ฑ

์Šคํƒ์˜ LIFO ํŠน์„ฑ์€ DFS, ๋ฐฑํŠธ๋ž˜ํ‚น ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

 

์ฐธ๊ณ  ์ž๋ฃŒ

https://gist.github.com/mlynch/ab554d84dc3b7b8be3d6