๐ŸŒˆ [Section2] 3. ์ž๋ฃŒ๊ตฌ์กฐ1

ํ˜„์ฃผยท2022๋…„ 9์›” 22์ผ
0

bootcamp

๋ชฉ๋ก ๋ณด๊ธฐ
22/71

๐Ÿ“• ์˜ค๋Š˜ ๋ฐฐ์šด ๋‚ด์šฉ!

  • ์Šคํƒ (Stack)
  • ํ (Queue)

โœ๏ธ ์ž๋ฃŒ๊ตฌ์กฐ

  • ์ž๋ฃŒ(๋ฐ์ดํ„ฐ)๋ฅผ ์ฒด๊ณ„์ ์œผ๋กœ ์ •๋ฆฌํ•˜์—ฌ ์ €์žฅํ•˜๊ณ  ํ™œ์šฉํ•˜๋Š” ๊ตฌ์กฐ ๊ทธ ์ž์ฒด

  • ๊ตฌํ˜„ ๋ฐฉ์‹์—๋Š” ์ œํ•œ X

  • Stack, Queue, Tree, Graph ์˜ ๋„ค๊ฐ€์ง€ ๊ตฌ์กฐ

Java์—์„œ๋Š” Stack์„ Stackย ํด๋ž˜์Šค๋กœ ๊ตฌํ˜„ํ•˜์—ฌ ์ œ๊ณต
But, Queue๋Š” Queueย ์ธํ„ฐํŽ˜์ด์Šค๋งŒ ์žˆ๊ณ  ๋ณ„๋„์˜ ํด๋ž˜์Šค๊ฐ€ ์—†์Œ โžœ Queueย ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค ์‚ฌ์šฉ


โœ๏ธ ์Šคํƒ (Stack)

  • ๋ฐ์ดํ„ฐ(data)๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์Œ“๋Š” ์ž๋ฃŒ๊ตฌ์กฐ Ex.ํ”„๋ง๊ธ€์Šค

  • Stack์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์„ 'PUSH', ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ฒƒ์„ 'POP'

    Ex. ๋Œ€ํ‘œ์ ์œผ๋กœ ๋ธŒ๋ผ์šฐ์ €์˜ ๋’ค๋กœ ๊ฐ€๊ธฐ, ์•ž์œผ๋กœ ๊ฐ€๊ธฐ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ๋จ

    1. ์ƒˆ๋กœ์šด ํŽ˜์ด์ง€๋กœ ์ ‘์†ํ•˜๋ฉด โžœ ํ˜„์žฌ ํŽ˜์ด์ง€ Prev Stack์— ๋ณด๊ด€
    2. ์ด์ „ ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐˆ ๋•Œ โžœ ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ Next Stack์— ๋ณด๊ด€ / Prev Stack์— ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋ณด๊ด€๋œ ํŽ˜์ด์ง€(ํ˜„์žฌ ํŽ˜์ด์ง€์˜ ์ „์— ์Œ“์ธ ํŽ˜์ด์ง€)๋ฅผ ํ˜„์žฌ ํŽ˜์ด์ง€๋กœ ๊ฐ€์ ธ์˜ด
    3. ๋‹ค์‹œ ์•ž์„œ ๋ฐฉ๋ฌธํ•œ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ๋•Œ โžœ Next Stack์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ณด๊ด€๋œ ํŽ˜์ด์ง€๋ฅผ ๊ฐ€์ ธ์˜ด
    4. ๋งˆ์ง€๋ง‰์œผ๋กœ ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ Prev Stack์— ๋ณด๊ด€

โœ” Stack์˜ ํŠน์ง•

  1. LIFO (Last In First Out)

  2. ๋ฐ์ดํ„ฐ๋Š” ํ•˜๋‚˜์”ฉ๋งŒ ๋„ฃ๊ณ  ๋บ„ ์ˆ˜ ์žˆ์Œ

  3. ํ•˜๋‚˜์˜ ์ž…์ถœ๋ ฅ ๋ฐฉํ–ฅ (์ œํ•œ์  ์ ‘๊ทผ)

โœ” Stack ๋ฉ”์„œ๋“œ

( ๋จผ์ € ํด๋ž˜์Šค์— ๋ฉ”์„œ๋“œ ๋งŒ๋“ค๊ณ  ๋ฉ”์ธ์—์„œ ์‚ฌ์šฉํ•ด์•ผํ•จ )

  • push() - ์Šคํƒ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€

  • pop() - ๋งˆ์ง€๋ง‰์œผ๋กœ ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์Šคํƒ์—์„œ ๊บผ๋ƒ„(์‚ญ์ œ)
    (๋น„์–ด์žˆ์œผ๋ฉด EmptyStackExceptionย ๋ฐœ์ƒ)

  • peek() - ์Šคํƒ์— ๊ฐ€์žฅ ๋‚˜์ค‘์— ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜

  • size() - ์Šคํƒ์˜ ํฌ๊ธฐ ๋ฐ˜ํ™˜

  • show() - ํ˜„์žฌ ์Šคํƒ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜(๊ทธ๋ƒฅ ์ฝ์–ด์˜ด)

  • clear() - ์Šคํƒ์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์‚ญ์ œ

  • empty() - ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š”์ง€ boolean ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜

  • search(data) - ์Šคํƒ์—์„œ data๋ฅผ ์ฐพ์•„ ๊ทธ ์œ„์น˜๋ฅผ int ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜
    (๋ชป์ฐพ์œผ๋ฉด -1 ๋ฐ˜ํ™˜)
    (๋ฐฐ์—ด๊ณผ ๋‹ฌ๋ฆฌ ์œ„์น˜(์ธ๋ฑ์Šค)๊ฐ€ 1๋ถ€ํ„ฐ ์‹œ์ž‘)

    ๐Ÿ’ก push() ์™€ add() ์ฐจ์ด

    • push()
      • stack์—์„œ ์ œ๊ณต
      • ๋ฆฌํ„ด๊ฐ’์ด < E >
        โ €
    • add()
      • List์—์„œ ์ œ๊ณต
      • ๋ฆฌํ„ด๊ฐ’์ด boolean

โœ” Stack ํด๋ž˜์Šค์˜ ๋‹จ์ 

  • synchronized ํ‚ค์›Œ๋“œ๊ฐ€ ๋ถ™์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— Thread-safe ํ•˜๋‹ค
  • ์ดˆ๊ธฐ ์šฉ๋Ÿ‰์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒ์„ฑ์ž๊ฐ€ ์—†๋‹ค ๋ณด๋‹ˆ ๋ฐ์ดํ„ฐ์˜ ์‚ฝ์ž…์„ ๋งŽ์ด ํ•˜๊ฒŒ ๋˜๋ฉด ๋ฐฐ์—ด์„ ๋ณต์‚ฌํ•ด์•ผ ํ•˜๋Š” ์ผ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

โœ๏ธ ํ (Queue)

  • Stack๊ณผ ๋ฐ˜๋Œ€๋˜๋Š” ๊ฐœ๋…

  • ๋“ค์–ด๊ฐ„ ์ˆœ์œผ๋กœ ์ฐจ๋ก€๋กœ ๋‚˜์˜ด Ex.ํ†จ๊ฒŒ์ดํŠธ

  • Queue์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๋Š” ๊ฒƒ์„ 'enqueue', ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด๋Š” ๊ฒƒ์„ 'dequeue'

    Ex. ๋Œ€ํ‘œ์ ์œผ๋กœ ํ”„๋ฆฐํ„ฐ๋กœ ๋ฌธ์„œ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ์ธ์‡„ํ•  ๋•Œ ์‚ฌ์šฉ๋จ

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

    ๐Ÿ’ก ๋ฒ„ํผ๋ง(buffering)
    ์ปดํ“จํ„ฐ์˜ CPU์—์„œ๋Š” ์ด๋ฒคํŠธ๋ฅผ ๊ทœ์น™์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ๋Œ€๋ถ€๋ถ„์˜ ์ปดํ“จํ„ฐ ์žฅ์น˜์—์„œ๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ถˆ๊ทœ์น™ํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ ๋ถˆ๊ทœ์น™์ ์ธ ์ด๋ฒคํŠธ๋ฅผ ๊ทœ์น™์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ„ํผ(buffer)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ
    โ €
    Ex. ์ปดํ“จํ„ฐ / ํ”„๋ฆฐํ„ฐ ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ(data) ํ†ต์‹ 
    ( ํ”„๋ฆฐํ„ฐ๋Š” ์†๋„๊ฐ€ ๋Š๋ฆฌ๊ณ  ์ปดํ“จํ„ฐ์˜ CPU๋Š” ๋ฐ์ด์ฒ˜ ์ฒ˜๋ฆฌ ์†๋„๊ฐ€ ๊ทธ์— ๋น„ํ•ด ๋น ๋ฆ„ )

    1. CPU๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ธ์‡„์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ(data) ๋งŒ๋“ค๊ณ , ์ธ์‡„ ์ž‘์—… Queue์— ์ €์žฅ ํ›„ ๋‹ค๋ฅธ ์ž‘์—… ํ•จ
    2. ํ”„๋ฆฐํ„ฐ๋Š” ์ธ์‡„ ์ž‘์—… Queue์—์„œ ๋ฐ์ดํ„ฐ(data) ๋ฐ›์•„์„œ ์ผ์ •ํ•œ ์†๋„๋กœ ์ธ์‡„

โœ” Queue์˜ ํŠน์ง•

  1. FIFO(First In First Out)

  2. ๋ฐ์ดํ„ฐ๋Š” ํ•˜๋‚˜์”ฉ๋งŒ ๋„ฃ๊ณ  ๋บ„ ์ˆ˜ ์žˆ์Œ

  3. ๋‘๊ฐœ์˜ ์ž…์ถœ๋ ฅ ๋ฐฉํ–ฅ

โœ” Queue ๋ฉ”์„œ๋“œ

( ๋จผ์ € ํด๋ž˜์Šค์— ๋ฉ”์„œ๋“œ ๋งŒ๋“ค๊ณ  ๋ฉ”์ธ์—์„œ ์‚ฌ์šฉํ•ด์•ผํ•จ )

  • add(data) - ํ์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
    (์„ฑ๊ณตํ•˜๋ฉด true๋ฅผ ๋ฐ˜ํ™˜, ์ €์žฅ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•˜๋ฉด ย IllegalStateExceptionย ๋ฐœ์ƒ)

  • poll() - ๊ฐ€์žฅ ๋จผ์ € ์ถ”๊ฐ€๋œ ๋ฐ์ดํ„ฐ๋ฅผ ํ์—์„œ ๊บผ๋ƒ„(์‚ญ์ œ)
    (๋น„์–ด์žˆ์œผ๋ฉด null์„ ๋ฐ˜ํ™˜)

  • size() - ํ์˜ ํฌ๊ธฐ ๋ฐ˜ํ™˜

  • peek() - ํ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ ์—†์ด ๋ฐ˜ํ™˜(๊ทธ๋ƒฅ ์ฝ์–ด์˜ด)
    (๋น„์–ด์žˆ์œผ๋ฉด null์„ ๋ฐ˜ํ™˜)

  • element() - ํ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ ์—†์ด ๋ฐ˜ํ™˜(๊ทธ๋ƒฅ ์ฝ์–ด์˜ด)
    (ย peekย ์™€ ๋‹ฌ๋ฆฌ ๋น„์–ด์žˆ์œผ๋ฉด ย NoSuchElementExceptionย ๋ฐœ์ƒ)

  • show() - ํ์— ๋“ค์–ด์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ฐ˜ํ™˜(๊ทธ๋ƒฅ ์ฝ์–ด์˜ด)

  • clear() - ํ์— ๋“ค์–ด์žˆ๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œ


๐ŸŒˆ ๋Š๋‚€์ 

์˜ค๋Š˜์„ ๊ฐœ๋…์ด ์ƒ๊ฐ๋ณด๋‹ค ๊ดœ์ฐฎ๊ธธ๋ž˜ ๋ญ์ง€?? ํ–ˆ๋Š”๋ฐ coplit ๋ฌธ์ œ๊ฐ€ ์–ด๋ ค์› ๋‹คใ…  ๊ทธ๋ž˜์„œ ์„ธ๋ฌธ์ œ์ธ๋ฐ๋„ ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๋˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์–ด์„œ ์‹œ๊ฐ„์ด ์ข€ ๊ฑธ๋ ธ๋‹ค ์˜ค๋Š˜ ์ดํ•ด๋ฅผ ๋งˆ์น˜๊ณ  ๋‚ด์ผ ๋ณด์ง€ ์•Š๊ณ  ํŽ˜์–ด์™€ ๊ฐ™์ด ์ž˜ ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค!

0๊ฐœ์˜ ๋Œ“๊ธ€