๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

[์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜] ์„ ํ˜•๊ตฌ์กฐ - ์Šคํƒ, ํ, ๋ฐํฌ, ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ (2023.04.07) ๋ณธ๋ฌธ

full stack/JAVA

[์ž๋ฃŒ๊ตฌ์กฐ์™€ ์•Œ๊ณ ๋ฆฌ์ฆ˜] ์„ ํ˜•๊ตฌ์กฐ - ์Šคํƒ, ํ, ๋ฐํฌ, ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ (2023.04.07)

Shinjio 2023. 4. 9. 12:05

๐ŸŽˆ ์Šคํƒ(stack)

์˜์–ด ๋œป : ์Œ“๋‹ค

์ž๋ฃŒ๊ฐ€ ์Œ“์•„์ ธ ์žˆ์Œ. ๋งจ ์•„๋ž˜์— ์žˆ๋Š” ์• ๋“ค์€ ์‚ฌ์šฉํ•˜๊ธฐ ์–ด๋ ค์›€. ์œ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ์กฐ

๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์Œ“์•„ ๋†“๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

๊ฐ€์žฅ ๋‚˜์ค‘์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ๊บผ๋ƒ„ (ํ›„์ž…์„ ์ถœ Last In First Out)

์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์‹คํ–‰ํ•  ๋•Œ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉ

ํ‘ธ์‰ฌ(push)์™€ ํŒ(pop)์„ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃธ

 

โ‘  ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ → main ๋ฉ”์„œ๋“œ push
    → main ๋ฉ”์„œ๋“œ๋ฅผ ์Šคํƒ์— ๋„ฃ์Œ (main push)
โ‘ก main์•ˆ์—์„œ z๋ผ๋Š” ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ(push)
    → z ๋ฉ”์„œ๋“œ๋ฅผ ์Šคํƒ์— ๋„ฃ์Œ
โ‘ข z ๋ฉ”์„œ๋“œ ์•ˆ์— x์™€ y ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ
    → x ํ˜ธ์ถœ(push) > ๋งˆ๋ฌด๋ฆฌ(pop)
    → y ํ˜ธ์ถœ(push) > ๋งˆ๋ฌด๋ฆฌ(pop)

โ‘ฃ z ํŒ 
โ‘ค main ํŒ

 

์Šคํƒ์„ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด

โ‘  ํ‘ธ์‰ฌ(push) : ๊ตฌ์กฐ์— ๊ฐ’์„ ๋„ฃ๋Š”๋‹ค

โ‘ก ํŒ(pop) : ๋งจ ์œ„ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ธ๋‹ค. 

์Šคํƒ์—์„œ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ top์—์„œ๋งŒ ๋“ค์–ด๊ฐ€๊ณ  ๋‚˜๊ฐˆ ์ˆ˜ ์žˆ์Œ

 

๊ด€๋ จ๋ฌธ์ œ

์ •๋‹ต : โ‘ฃ๋ฒˆ
โ‘  A, B, C push > C, B, A pop > D push > D pop > A , B, C push > C, B, A pop
โ‘ก A, B push > B pop > C push > C pop > D push > D pop > A push > A pop
โ‘ข A, B, C push > C, B, A pop > D push > D pop
โ‘ฃ A, B, C, D push > D pop > ๋ถˆ๊ฐ€๋Šฅ

 

โ€ป ์Šคํƒ ๋ฉ”์„œ๋“œ์— vector์™€ ์ปฌ๋ ‰์…˜ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” ์ด์œ 

์ปฌ๋ ‰์…˜์€ ๋ชจ๋“  ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํฌํ•จ(์กฐ๋ถ€๋ชจ)

๊ทธ ์•„๋ž˜์— vector๊ฐ€ ์žˆ์Œ(๋ถ€๋ชจ)

๊ทธ ์•„๋ž˜์— stack์ด ์žˆ์Œ

์ปฌ๋ ‰์…˜์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์„ ํ•˜์œ„์˜ ๋ถ€๋ชจ(vector), ์†์ž(stack)๊ฐ€ ์“ธ ์ˆ˜ ์žˆ์Œ. ๋ฒกํ„ฐ๊ฐ€ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์„ ํ•˜์œ„์˜ stack์ด ์“ธ ์ˆ˜ ์žˆ์Œ → ์ƒ์† / ๋ถ€๋ชจ ํ˜น์€ ์กฐ๋ถ€๋ชจ๊ฐ€ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ์ž์‹ ๊ฐ์ฒด๊ฐ€ ์“ธ ์ˆ˜ ์žˆ์Œ. ๋Œ€์‹  stack์ด ๊ฐ€์ง„ ๊ธฐ๋Šฅ์€ ๋ถ€๋ชจ, ์กฐ๋ถ€๋ชจ๊ฐ€ ์“ธ ์ˆ˜ ์—†์Œ. 

 

 

โš™๏ธ ์Šคํƒ์˜ ํ™œ์šฉ

1. ์›น ๋ธŒ๋ผ์šฐ์ € ๋’ค๋กœ๊ฐ€๊ธฐ(๋ฐฉ๋ฌธ๊ธฐ๋ก)

2. ctrl + z 

3. ์—ญ์ˆœ ๋ฌธ์ž์—ด ๋งŒ๋“ค๊ธฐ

4. ํ›„์œ„ ํ‘œ๊ธฐ๋ฒ• ๊ณ„์‚ฐ 

ํ›„์œ„ํ‘œ๊ธฐ๋ฒ•
์—ฐ์‚ฐ์‹. ์ปดํ“จํ„ฐ๊ฐ€ ๊ณ„์‚ฐํ•˜๊ธฐ ์‰ฌ์šด ํ˜•์‹, ๊ด„ํ˜ธ๊ฐ€ ์—†๊ณ  ์—ฐ์‚ฐ์ž๊ฐ€ ๋’ค์— ์žˆ์Œ
8 2 / 3 - 

์ผ๋ฐ˜์ ์ธ ํ‘œ๊ธฐ๋ฒ• - ์ค‘์œ„ ํ‘œ๊ธฐ๋ฒ• (8 / 2 - 3)

 

5. ์žฌ๊ท€์  ์•Œ๊ณ ๋ฆฌ์ฆ˜

์žฌ๊ท€ํ•จ์ˆ˜ - ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜

์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ : ์ž๊ธฐ์ž์‹ ์„ ๋„ˆ๋ฌด ๋งŽ์ด ํ˜ธ์ถœํ•˜์—ฌ ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹ค ์“ฐ๋Š” ๊ฒฝ์šฐ

 

โ–ผ ์žฌ๊ท€ํ•จ์ˆ˜ ์˜ˆ์‹œ โ–ผ

 

โš™๏ธ ์Šคํƒ ์ฃผ์š” ๋ฉ”์„œ๋“œ

 

๐ŸŽˆ ํ

๋‹จ์–ด ์˜๋ฏธ : ์ค„ ์„œ ์žˆ๋Š” ๊ฒƒ 

์ œ์ผ ๋จผ์ € ๋“ค์–ด์˜จ ๊ฒƒ์ด ๋จผ์ € ๋‚˜๊ฐ€๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ

๊ฐ€์žฅ ๋จผ์ € ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์žฅ ๋จผ์ € ๊บผ๋ƒ„ (์„ ์ž…์„ ์ถœ, First In First Out)

Enqueue ๋ฐ์ดํ„ฐ ๋“ค์–ด๊ฐ€๋Š”๊ฑฐ 

Dequeue ๋ฐ์ดํ„ฐ ๊บผ๋‚ด๋Š”๊ฑฐ / ์•ž์ชฝ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜๊ฐ

์Šคํƒ์€ bottom/top ์ˆ˜์ง๊ตฌ์กฐ์ธ ๋ฐ˜๋ฉด ํ๋Š” ์ˆ˜ํ‰๊ตฌ์กฐ(์•ž/๋’ค)

 

Stack Queue 
๋ถ€๋ชจ๊ฐ€ vector - ArrayList
→ ์—ฐ์†๋œ ๊ณต๊ฐ„ ํ• ๋‹น
LinkedList์˜ ํ˜•์‹์„ ๋”ฐ์„œ ๋งŒ๋“ค์–ด์ง
→ ๊ณต๊ฐ„์ด ์—ฐ์†์ ์ด์ง€ ์•Š์Œ
๋‹ค์Œ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๊ฐ’(์ฐธ์กฐ๊ฐ’)์„ ํ•จ๊ป˜ ์ €์žฅํ•˜๊ณ  ์žˆ์–ด์„œ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ๋‹ค์Œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Œ
Dequeue๋ฅผ ํ•˜๋ฉด ๊ณต๊ฐ„์„ ๋‹ค๋ฅธ ๊ณณ์— ์“ธ ์ˆ˜ ์žˆ๋„๋ก ํ•จ

 

 

 

โš™๏ธ ํ์˜ ํ™œ์šฉ

1. ํ†ต์‹ (๋ฐ์ดํ„ฐ ํ†ต์‹ ) ex.์˜์ƒ์˜ ์•ž๋ถ€๋ถ„๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ด

2. ํ”„๋ฆฐํ„ฐ ์ถœ๋ ฅ : ๊ฐ€์žฅ ๋จผ์ € ๋Œ€๊ธฐ์—ด์— ์˜ค๋ฅธ ๋ฌธ์„œ ๋จผ์ € ์ถœ๋ ฅ

3. ์šด์˜์ฒด์ œ์˜ ํ…Œ์Šคํฌ ์Šค์ผ€์ค„๋ง : ์„ ์ž…์„ ์ถœ ์ฒ˜๋ฆฌ ์Šค์ผ€์ค„๋ง ์ •์ฑ… ์‚ฌ์šฉ

 

โš™๏ธ ํ ์ฃผ์š” ๋ฉ”์„œ๋“œ

 

๐ŸŽˆ ๋ฐํฌ

์‚ฝ์ž…๊ณผ ์‚ญ์ œ๊ฐ€ ๋ฆฌ์ŠคํŠธ ์–‘์ชฝ ๋์—์„œ ๋ชจ๋‘ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ

์Šคํƒ๊ณผ ํ๊ฐ€ ํ•ฉ์ณ์ง„ ๊ตฌ์กฐ

์ƒ๊ธด๊ฑด ํ์™€ ๋น„์Šท

ํ๋Š” ๋’ค์—์„œ๋Š” ๋“ค์–ด์˜ค๊ธฐ, ๋‚˜๊ฐ€๋Š”๊ฑด ์•ž์—์„œ๋งŒ ๊ฐ€๋Šฅ

๋ฐํฌ๋Š” ๋ฆฌ์ŠคํŠธ ์–‘์ชฝ ๋์—์„œ ๋ชจ๋‘ ์‚ฝ์ž…, ์‚ญ์ œ ๊ฐ€๋Šฅ

๊ฐ€์žฅ ๋จผ์ € ๋„ฃ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋นจ๋ฆฌ ๋‚˜๊ฐˆ์ˆ˜๋„, ๊ฐ€์žฅ ๋Šฆ๊ฒŒ ๋‚˜๊ฐˆ์ˆ˜๋„ ์žˆ์Œ

๋ฐํฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์Šคํƒ์ฒ˜๋Ÿผ ํ˜น์€ ํ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ → ๋‚ด๊ฐ€ ๊ทœ์น™์„ ์ •ํ•  ์ˆ˜ ์žˆ์Œ

- ํ•œ์ชฝ์—์„œ ์‚ฝ์ž…, ์‚ญ์ œ ๋™์‹œ์— → ์Šคํƒ

- ํ•œ์ชฝ์—์„œ ์‚ฝ์ž…, ํ•œ์ชฝ์—์„œ ์‚ญ์ œ → ํ

๋ฐํ๋ฅผ ์“ฐ๋Š” ์ด์œ : ์‹œ๊ฐ„์ด ๋” ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— 

 

โš™๏ธ ๋ฐํฌ ์ฃผ์š” ๋ฉ”์„œ๋“œ

 

๐ŸŽˆ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ

๋ฐ์ดํ„ฐ๊ฐ€ ์—ฐ์†๋œ ์œ„์น˜์— ์ €์žฅ๋˜์ง€ ์•Š๊ณ  ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ ๋ถ€๋ถ„๊ณผ ๋‹ค์Œ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ ๋ถ€๋ถ„์„ ๋ณ„๋„๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ตฌ์กฐ

๊ฐ ๋ฐ์ดํ„ฐ๋Š” ๋…ธ๋“œ๋ผ ๋ถ€๋ฆ„

์ž์ฃผ ์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ๊ฒฝ์šฐ ์‚ฌ์šฉ(์—ฐ์†๋œ ๊ณต๊ฐ„์—์„œ๋Š” ํšจ์œจ์ ์ด์ง€ ์•Š์Œ. ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋Š” ๋Š์–ด๋ฒ„๋ฆฌ๋ฉด ๊ทธ๋งŒ)

๊ฒ€์ƒ‰์€ ๋Š๋ฆผ

 

โš™๏ธ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ ์ข…๋ฅ˜ 

 

๋‹จ์ผ

๋‹จ๋ฐฉํ–ฅ ๊ตฌ์กฐ , ์ฃผ์†Œ๋ถ€๊ฐ€ 1๊ฐœ → ๋‹ค์Œ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์Œ (์ ˆ๋Œ€ ์•ž์œผ๋กœ ๋‹ค์‹œ ๋Œ์•„๊ฐˆ ์ˆ˜ ์—†์Œ)

์ด์ „ ๋…ธ๋“œ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ˆœํšŒํ•ด์•ผ ํ•จ

์ด์ค‘

์ฃผ์†Œ๋ถ€๊ฐ€ 2๊ฐœ → ์™ผ์ชฝ์—๋Š” ์ด์ „ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ ์˜ค๋ฅธ์ชฝ์—๋Š” ์ดํ›„ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ

์›ํ˜•

๋‹จ์ผ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๋ฅผ ์“ธ ๋•Œ ์ˆœํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก(๋‹ค์‹œ 1๋ฒˆ์œผ๋กœ ๋Œ์•„๊ฐˆ ์ˆ˜ ์žˆ์Œ) 

๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊ฐ€ ์ฒซ๋ฒˆ์งธ ๋…ธ๋“œ์˜ ์ฃผ์†Œ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ „ ๋…ธ๋“œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Œ

 

โš™๏ธ ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ์˜ ํ™œ์šฉ

1. ๋ฐฐ์—ด๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๋Š” ๊ตฌ์กฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ์‚ฌ์šฉ์ด ์ œํ•œ์ด ์žˆ์Œ. ์‚ฝ์ž… ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋˜๋ฉด ์—ฐ์†๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ 

2. ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํ•œ ๊ฒฝ์šฐ ์‚ฌ์šฉ