๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Study/Java

[TIL] ์ž๋ฃŒ๊ตฌ์กฐ : ์Šคํƒ, ํ

by hong- 2022. 5. 27.

๐Ÿ™๐Ÿป ์ž๋ฃŒ๊ตฌ์กฐ

  - ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ์˜ ๋ฌถ์Œ์„ ์ €์žฅํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ •์˜ํ•œ ๊ฒƒ

  - ์ƒํ™ฉ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์–ด ํŠน์ •ํ•œ ์ƒํ™ฉ์— ๋†“์€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ํŠนํ™”

๐Ÿ’ก ๋ฐ์ดํ„ฐ ?

  - ๋ฌธ์ž, ์ˆซ์ž, ์†Œ๋ฆฌ, ๊ทธ๋ฆผ, ์˜์ƒ ๋“ฑ ์‹ค์ƒํ™œ์„ ๊ตฌ์„ฑํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ๊ฐ’

  - ๋ฐ์ดํ„ฐ๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ์ •๋ฆฌํ•˜์—ฌ ์ €์žฅํ•ด๋‘๋Š” ๊ฒƒ์€ ๋ฐ์ดํ„ฐ ํ™œ์šฉ์— ์œ ๋ฆฌํ•จ

 

 


๐Ÿ“ Stack ์Šคํƒ

Stack<Integer> stack = new Stack<>();

  - ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์Œ“๋Š” ๊ตฌ์กฐ

  - ๊ฐ์ž์นฉ ํ†ต์ด Stack, ๊ฐ์ž์นฉ์€ ๋ฐ์ดํ„ฐ๋กœ ๋น„์œ ํ•  ์ˆ˜ ์žˆ์Œ

  - ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด๊ฐ„ ์ฒซ ๋ฒˆ์งธ ๊ฐ์ž์นฉ์€ ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋‚˜์˜ค๋ฉฐ, ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ„ ์„ธ ๋ฒˆ์งธ ๊ฐ์ž์นฉ์ด ๊ฐ€์žฅ ๋จผ์ € ๋‚˜์˜ด = LIFO

  - ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์ด ํ•˜๋‚˜์˜ ๋ฐฉํ–ฅ์œผ๋กœ ์ด๋ฃจ์–ด์ง€๋Š” ์ œํ•œ์  ์ ‘๊ทผ

  - ๊ฐ์ž์นฉ์„ ๋„ฃ๋Š” ๊ฒƒ, ์ฆ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์„ PUSH ๋ผ๊ณ  ํ•จ

  - ๊ฐ์ž์นฉ์„ ๊บผ๋‚ด ๋จน๋Š” ๊ฒƒ, ์ฆ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ฒƒ์„ POP ์ด๋ผ๊ณ  ํ•จ

  

โ–ช๏ธ Stack์˜ ํŠน์ง•

  โ‘  LIFO ( Last In First Out )

   - ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๋Š” ์ œ์ผ ๋‚˜์ค‘์— ๋‚˜์˜ค๋Š” ํ›„์ž…์„ ์ถœ์˜ ๊ตฌ์กฐ

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

  → ๋ฐ์ดํ„ฐ๋Š” ์Šคํƒ ์•ˆ์—  1๏ธโƒฃ

                                     2๏ธโƒฃ

                                     3๏ธโƒฃ

                                     4๏ธโƒฃ ์ฒ˜๋Ÿผ ๋‹ด๊น€

stack.pop();
stack.pop();
stack.pop();
stack.pop();

  → ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๋Š” 1 ๋ถ€ํ„ฐ ๋‚˜์˜ค๊ธฐ ์‹œ์ž‘ : 1๏ธโƒฃ→2๏ธโƒฃ→3๏ธโƒฃ→4๏ธโƒฃ

  โ‘ก ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ๋งŒ ๋„ฃ๊ณ  ๋บ„ ์ˆ˜ ์žˆ์Œ

  โ‘ข ํ•˜๋‚˜์˜ ์ž…์ถœ๋ ฅ ๋ฐฉํ–ฅ์„ ๊ฐ€์ง


โ–ช๏ธ Stack ๋ฉ”์„œ๋“œ

 โ‘  push( )

   - ์Šคํƒ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

 โ‘ก pop( )

   - ๊ฐ€์žฅ ๋‚˜์ค‘์— ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์Šคํƒ์—์„œ ์‚ญ์ œํ•˜๊ณ  ์‚ญ์ œํ•œ ๋ฐ์ดํ„ฐ ๋ฆฌํ„ด

 โ‘ข size( )

   - ์Šคํƒ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ ๋ฆฌํ„ด

 โ‘ฃ peek( )

   - ๊ฐ€์žฅ ๋‚˜์ค‘์— ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ ์กฐํšŒ

 โ‘ค show( )

   - ํ˜„์žฌ ์Šคํƒ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ String ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌํ„ด

 โ‘ฅ clear( )

   - ํ˜„์žฌ ์Šคํƒ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์‚ญ์ œ

 โ‘ฆ empty( )

   - ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•  ๋•Œ ์‚ฌ์šฉ


โ–ช๏ธ Stack ๊ตฌํ˜„์‹œ ๋ฐฐ์—ด / ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„

  1๏ธโƒฃ ๋ฐฐ์—ด

   - ์žฅ์  : ๊ตฌํ˜„์ด ์‰ฝ๊ณ  ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ์†๋„(์กฐํšŒ) ๋น ๋ฆ„

   - ๋‹จ์  : ์ตœ๋Œ€ ๊ฐœ์ˆ˜๋ฅผ ์ •ํ•ด์•ผ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  2๏ธโƒฃ ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ

   - ์žฅ์  : ๋ฐ์ดํ„ฐ์˜ ์ตœ๋Œ€ ๊ฐœ์ˆ˜๊ฐ€ ํ•œ์ •๋˜์ง€ ์•Š์œผ๋ฉฐ ์‚ฝ์ž…, ์‚ญ์ œ๊ฐ€ ์šฉ์ด

   - ๋‹จ์  : ์กฐํšŒ๊ฐ€ ํž˜๋“ฌ (๋…ธ๋“œ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ์กฐํšŒํžˆ๊ฐ€ ๋•Œ๋ฌธ)


๐Ÿ“ Queue ํ

Queue<Integer> queue = new LinkedList<>();

  - ์„ ์ž…์„ ์ถœ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๋Š” ๊ตฌ์กฐ

  - ๋นจ๋Œ€๋ฅผ ์˜ˆ์‹œ๋กœ ๋“ค์–ด๋ณด๋ฉด ๋นจ๋Œ€๋Š” ํ, ๋ฒ„๋ธ”ํ‹ฐ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์˜๋ฏธ

  - ๊ฐ ์žฅ์น˜ ์‚ฌ์ด์˜ ์†๋„ ๋ฐ ์‹œ๊ฐ„ ์ฐจ์ด๋ฅผ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์ž„์‹œ๊ธฐ์–ต ์žฅ์น˜์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉ = buffer

  - ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๋Š” ๋จผ์ € ๋‚˜๊ฐ€๋Š” FIFO, LILO์„ ํŠน์ง•

  - ์ž…๋ ฅ๊ณผ ์ถœ๋ ฅ์˜ ๋ฐฉํ–ฅ์ด ๊ณ ์ •๋˜์–ด ์žˆ์œผ๋ฉฐ ๋‘ ๊ณณ์„ ์ ‘๊ทผ ๊ฐ€๋Šฅ

   - ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์„ enqueue, ๊บผ๋‚ด๋Š” ๊ฒƒ์€ dequeue

โ–ช๏ธ Queue ์˜ ํŠน์ง•

  โ‘  FIFO ( First In First Out )

   - ๋จผ์ € ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๋Š” ์ œ์ผ ์ฒ˜์Œ์œผ๋กœ ๋‚˜์˜ด

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

  → ๋ฐ์ดํ„ฐ๋Š” ํ ์•ˆ์— | 1๏ธโƒฃ |

                                 | 2๏ธโƒฃ |

                                 | 3๏ธโƒฃ |

                                 | 4๏ธโƒฃ | ์ฒ˜๋Ÿผ ๋‹ด๊น€

queue.poll();
queue.poll();
queue.poll();
queue.poll();

  → ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์˜ฌ ๋•Œ๋Š” ๋จผ์ € ๋“ค์–ด๊ฐ„ 4 ๋ถ€ํ„ฐ ๋‚˜์˜ค๊ธฐ ์‹œ์ž‘ : 4๏ธโƒฃ→3๏ธโƒฃ→2๏ธโƒฃ→1๏ธโƒฃ

  โ‘ก ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ๋งŒ ๋„ฃ๊ณ  ๋บ„ ์ˆ˜ ์žˆ์Œ

  โ‘ข ๋‘ ๊ฐœ์˜ ์ž…์ถœ๋ ฅ ๋ฐฉํ–ฅ์„ ๊ฐ€์ง


๐Ÿ’ก ์ปดํ“จํ„ฐ์™€ ํ”„๋ฆฐํ„ฐ ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ ํ†ต์‹ 


โ–ช๏ธ Queue ๋ฉ”์„œ๋“œ

 โ‘  add( )

   - ํ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

 โ‘ก poll( )

   - ๊ฐ€์žฅ ๋จผ์ € ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ์—์„œ ์‚ญ์ œํ•˜๊ณ  ์‚ญ์ œํ•œ ๋ฐ์ดํ„ฐ ๋ฆฌํ„ด

 โ‘ข size( )

   - ํ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ ๋ฆฌํ„ด

 โ‘ฃ peek( )

   - ๊ฐ€์žฅ ๋จผ์ € ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ ์กฐํšŒ

 โ‘ค show( )

   - ํ˜„์žฌ ํ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ String ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌํ„ด

 โ‘ฅ clear( )

   - ํ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์‚ญ์ œ


โ–ช๏ธ Queue ๊ตฌํ˜„

  โ‘   ์ˆœ์ฐจ ํ

   - ๋ฐฐ์—ด๋กœ ํ๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฒƒ

   - ํฌ๊ธฐ๊ฐ€ ์ œํ•œ๋˜์–ด ์žˆ๊ณ  ๋นˆ ๊ณต๊ฐ„์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๋ชจ๋“  ์ž๋ฃŒ๋ฅผ ๊บผ๋‚ด๊ฑฐ๋‚˜ ์ž๋ฃŒ๋ฅผ ํ•œ ์นธ์”ฉ ์˜ฎ๊ฒจ์•ผ ํ•จ 

  โ‘ก  ์›ํ˜• ํ

   - ์ฒซ๋ฒˆ์งธ ์š”์†Œ๊ฐ€ ํ์˜ ๋์— ๋‹ฟ์œผ๋ฉด ํ์˜ ๋งจ ์•ž์œผ๋กœ ์ž๋ฃŒ๋ฅผ ๋ณด๋‚ด์–ด ์›ํ˜•์œผ๋กœ ์—ฐ๊ฒฐ

   - ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ž˜ ํ™œ์šฉํ•˜์ง€๋งŒ ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ ํฌ๊ธฐ ์ œ์•ฝ

  โ‘ข  ๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ ํ

    - ํ์˜ ๋‹จ์ ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹

    - ํฌ๊ธฐ ์ œํ•œ์ด ์—†๊ณ  ๋ฏธ๋ฆฌ ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋˜์–ด ์‚ฝ์ž… ์‚ญ์ œ๊ฐ€ ํŽธ๋ฆฌํ•จ

    - ํ์˜ ๊ธธ์ด๋ฅผ ๋Š˜๋ฆด ์ˆ˜ ์žˆ์–ด ์˜ค๋ฒ„ ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ