Jieunny์˜ ๋ธ”๋กœ๊ทธ

S4) Unit 1. [์ž๋ฃŒ๊ตฌ์กฐ/ ์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ž๋ฃŒ๊ตฌ์กฐ & Stack & Queue ๋ณธ๋ฌธ

CodeStates/learning contents

S4) Unit 1. [์ž๋ฃŒ๊ตฌ์กฐ/ ์•Œ๊ณ ๋ฆฌ์ฆ˜] ์ž๋ฃŒ๊ตฌ์กฐ & Stack & Queue

Jieunny 2023. 3. 14. 12:00

๐Ÿ“ฃ  ์ž๋ฃŒ๊ตฌ์กฐ๋ž€?

๐Ÿญ. ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์ •์˜

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

๐Ÿฎ. ์ž๋ฃŒ๊ตฌ์กฐ์˜ ๋ถ„๋ฅ˜

โœ”๏ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ…Œ์ŠคํŠธ์— ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” 4๊ฐ€์ง€ ๊ฐœ๋…
โžฐ Stack, Queue, Tree, Graph

 

๐Ÿฏ. ์ž๋ฃŒ๊ตฌ์กฐ์˜ ํŠน์ง•

โœ”๏ธ ํŠน์ •ํ•œ ์ƒํ™ฉ์— ๋†“์ธ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ์— ํŠนํ™”๋˜์–ด ์žˆ๋‹ค.
โžฐ ์–ด๋– ํ•œ ์ƒํ™ฉ์— ์ ํ•ฉํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋น ๋ฅด๊ณ  ์ •ํ™•ํ•˜๊ฒŒ ์ ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.


๐Ÿ“ฃ  Stack ์ด๋ž€?

๐Ÿญ. Stack์˜ ์ •์˜

โœ”๏ธ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์Œ“๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
โžฐ ๋™๊ทธ๋ž€ ์›ํ†ต์— ๊ตฌ์Šฌ์„ ๋„ฃ๊ณ , ๊ฐ€์žฅ ๋งจ์œ„์— ์žˆ๋Š” ๊ตฌ์Šฌ์„ ๋จผ์ € ๋นผ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์Šฌ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
 

๐Ÿฎ. Stack์˜ ๊ตฌ์กฐ

โœ”๏ธ LIFO(Last In First Out) ํ˜น์€ FILO(First In Last Out)
โžฐ ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ์–‘์ชฝ์ด ์•„๋‹Œ ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์—์„œ๋งŒ ์ œํ•œ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.
โžฐ ๋งจ ์ฒ˜์Œ ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋Š” ์ œ์ผ ๋ฐ‘์— ์œ„์น˜ํ•˜๋ฏ€๋กœ ์ œ์ผ ๋‚˜์ค‘์— ๊บผ๋‚ผ ์ˆ˜ ์žˆ๊ณ , ๋งจ ๋งˆ์ง€๋ง‰์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ๋Š” ์ œ์ผ ์œ„์— ์œ„์น˜ํ•˜๋ฏ€๋กœ ์ฒซ๋ฒˆ์งธ๋กœ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
โžฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์„ PUSH, ๊บผ๋‚ด๋Š” ๊ฒƒ์„ POP ์ด๋ผ๊ณ  ํ•œ๋‹ค.
 

๐Ÿฏ. Stack์˜ ํŠน์ง•

1๏ธโƒฃ LIFO(Last In First Out)
โžฐ ํ›„์ž…์„ ์ถœ์˜ ๊ตฌ์กฐ
โžฐ ์Šคํƒ ๊ตฌ์กฐ ๋‚ด์—์„œ๋Š” ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์—†์œผ๋ฉฐ, ์ตœ์ƒ๋‹จ์—์„œ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋‹ค -> ๋งค์šฐ ๋น ๋ฅด๋‹ค๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);

// stack
// ๋จผ์ € ๋„ฃ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งจ ๋งˆ์ง€๋ง‰์— ์œ„์น˜ํ•œ๋‹ค.
| 4 |
| 3 |
| 2 |
| 1 |


stack.pop();

// stack
// ๋งจ ๋งˆ์ง€๋ง‰์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ œ์ผ ์ฒ˜์Œ ๋น ์ง„๋‹ค.
| 3 |
| 2 |
| 1 |

 
2๏ธโƒฃ ํ•˜๋‚˜์˜ ์ž…์ถœ๋ ฅ ๋ฐฉํ–ฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
โžฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋บ„ ์ˆ˜ ์žˆ๋Š” ๊ณณ์ด ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ํ•œ ๊ณณ์ด๋‹ค.
โžฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์„ ๋•Œ๋„ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋„ฃ๊ณ , ๋บ„ ๋•Œ๋„ ์ตœ์ƒ๋‹จ์—์„œ ๋บ„ ์ˆ˜ ์žˆ๋‹ค.
 
3๏ธโƒฃ ๋ฐ์ดํ„ฐ๋Š” ํ•˜๋‚˜์”ฉ ๋„ฃ๊ณ  ๋บ„ ์ˆ˜ ์žˆ๋‹ค.
โžฐ ์ž…์ถœ๋ ฅ ๊ณต๊ฐ„์ด ํ•œ ๊ตฐ๋ฐ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋Š” ํ•˜๋‚˜์”ฉ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋‹ค.
โžฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋นผ๊ณ  ์‹ถ์„ ๋• pop()์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
 

๐Ÿฐ. Stack์˜ ์‹ค์‚ฌ์šฉ ์˜ˆ์ œ

โœ”๏ธ ๋ธŒ๋ผ์šฐ์ €์˜ ๋’ค๋กœ ๊ฐ€๊ธฐ, ์•ž์œผ๋กœ ๊ฐ€๊ธฐ ๊ธฐ๋Šฅ
โžฐ ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€์— ์ ‘์†ํ•  ๋•Œ, ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ Prev Stack์— ๋ณด๊ด€ํ•œ๋‹ค.
โžฐ ๋’ค๋กœ ๊ฐ€๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด ํ˜„์žฌ ํŽ˜์ด์ง€๋Š” Next Stack์— ๋„ฃ๊ณ , Prev Stack์— ์ตœ์ƒ๋‹จ์— ๋ณด๊ด€๋œ ํŽ˜์ด์ง€๋ฅผ ํ˜„์žฌ ํŽ˜์ด์ง€๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.
โžฐ ์•ž์œผ๋กœ ๊ฐ€๊ธฐ๋ฅผ ๋ˆ„๋ฅด๋ฉด Next Stage์— ๊ฐ€์žฅ ์ตœ์ƒ๋‹จ์— ๋ณด๊ด€๋œ ํŽ˜์ด์ง€๋ฅผ ํ˜„์žฌ ํŽ˜์ด์ง€๋กœ ๊ฐ€์ ธ์˜ค๊ณ , ํ˜„์žฌ ํŽ˜์ด์ง€์˜€๋˜ ํŽ˜์ด์ง€๋Š” Prev Stack์— ๋„ฃ๋Š”๋‹ค.


๐Ÿ“ฃ  Queue ๋ž€?

๐Ÿญ. Queue์˜ ์ •์˜

โœ”๏ธ Stack๊ณผ ๋ฐ˜๋Œ€๋˜๋Š” ๊ฐœ๋…์œผ๋กœ ๋จผ์ € ์ง‘์–ด ๋„ฃ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜ค๋Š” ์ž„์‹œ ๊ธฐ์–ต ์žฅ์น˜
 

๐Ÿฎ. Queue์˜ ๊ตฌ์กฐ

โœ”๏ธ FIFO(First In First Out) ํ˜น์€ LILO(Last In Last Out)
โžฐ ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜์˜จ๋‹ค.
โžฐ ์ž…๋ ฅ ๋ฐฉํ–ฅ๊ณผ ์ถœ๋ ฅ ๋ฐฉํ–ฅ์ด ์ฒ˜์Œ๊ณผ ๋์œผ๋กœ ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฉฐ, ์ž…๋ ฅ ์‹œ์—๋Š” ํ์˜ ๋(tail)์—์„œ, ๊บผ๋‚ผ ๋•Œ๋Š” ํ์˜ ๋งจ ์•ž(head)์—์„œ ์ง„ํ–‰๋œ๋‹ค.
โžฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์„ enqueue, ๊บผ๋‚ด๋Š” ๊ฒƒ์„ dequeue ๋ผ๊ณ  ํ•œ๋‹ค.
 

๐Ÿฏ. Queue์˜ ํŠน์ง•

1๏ธโƒฃ FIFO(Fist In First Out)
โžฐ ์„ ์ž…์„ ์ถœ์˜ ๊ตฌ์กฐ

queue.enqueue(1);
queue.enqueue(2);
queue.enqueue(3);
queue.enqueue(4);

// Queue
|  1   <-   2   <-   3   <- 4   |
์ถœ๋ ฅ(head)                      ์ž…๋ ฅ(tail)

queue.dequeue();

// Queue
|  2   <-   3   <- 4   |
์ถœ๋ ฅ(head)             ์ž…๋ ฅ(tail)

 
2๏ธโƒฃ ๋‘ ๊ฐœ์˜ ์ž…์ถœ๋ ฅ ๋ฐฉํ–ฅ์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.
โžฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•  ๋•Œ๋Š” ํ์˜ ๋งจ ๋(tail)์œผ๋กœ๋งŒ ์ž…๋ ฅ ๊ฐ€๋Šฅํ•˜๊ณ , ์ถœ๋ ฅํ•  ๋•Œ๋Š” ํ์˜ ๋งจ ์•ž(head)์œผ๋กœ๋งŒ ์ถœ๋ ฅ์ด ๊ฐ€๋Š”ใ…‡ํ•˜๋‹ค.
โžฐ ์ž…์ถœ๋ ฅ ๋ฐฉํ–ฅ์ด ๊ฐ™๋‹ค๋ฉด Queue ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์—†๋‹ค!
 
3๏ธโƒฃ ๋ฐ์ดํ„ฐ๋Š” ํ•˜๋‚˜์”ฉ ๋„ฃ๊ณ  ๋บ„ ์ˆ˜ ์žˆ๋‹ค.
โžฐ ๊ฐ ์ฒ˜๋ฆฌ ์‹œ๋งˆ๋‹ค ํ•œ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ฑฐ๋‚˜ ๋บ„ ์ˆ˜ ์žˆ๋‹ค.
โžฐ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋นผ๊ณ  ์‹ถ๋‹ค๋ฉด ํ์˜ ๋งจ ์•ž์—์„œ ํ•œ ๋ฒˆ์— ํ•œ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋บ„ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.
 

๐Ÿฐ. Queue์˜ ์‹ค์‚ฌ์šฉ ์˜ˆ์ œ

โœ”๏ธ ํ”„๋ฆฐํ„ฐ์—์„œ์˜ ๋ฌธ์„œ ์ธ์‡„
โžฐ ์šฐ๋ฆฌ๊ฐ€ ๋ฌธ์„œ๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์ถœ๋ ฅ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋ฌธ์„œ๋Š” ์ธ์‡„ ์ž‘์—… Queue์— ๋“ค์–ด๊ฐ„๋‹ค.
โžฐ ํ”„๋ฆฐํ„ฐ๋Š” ์ธ์‡„ ์ž‘์—… Queue์— ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ๋ฌธ์„œ๋ฅผ ์ธ์‡„ํ•œ๋‹ค.
 
โœš ๋ฒ„ํผ(buffer)
โœ”๏ธ ์ปดํ“จํ„ฐ ์žฅ์น˜๋“ค ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ, ๊ฐ ์žฅ์น˜์—์„œ ์กด์žฌํ•˜๋Š” ์†๋„๋‚˜ ์‹œ๊ฐ„ ์ฐจ์ด๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
โžฐ ๋ถˆ๊ทœ์น™์ ์œผ๋กœ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋ฅผ ๊ทœ์น™์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

(์™ผ) ๋Œ€๋ถ€๋ถ„์˜ ์ปดํ“จํ„ฐ ์žฅ์น˜์—์„œ ๋ถˆ๊ทœ์น™์ ์œผ๋กœ ์ด๋ฒคํŠธ ๋ฐœ์ƒ / (์˜ค) CPU์—์„œ ๊ทœ์น™์ ์œผ๋กœ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ

โžฐ ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋ฆฐํ„ฐ๋Š” ์†๋„๊ฐ€ ๋Š๋ฆฌ๊ณ , CPU๋Š” ๊ทธ์— ๋น„ํ•ด ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค.
โžฐ CPU๋Š” ๋น ๋ฅธ ์†๋„๋กœ ์ธ์‡„์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“  ํ›„, Queue์— ์ €์žฅํ•˜๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
โžฐ ํ”„๋ฆฐํ„ฐ๋Š” Queue์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ผ์ •ํ•œ ์†๋„๋กœ ์ธ์‡„ํ•œ๋‹ค.