2 ๋ถ„ ์†Œ์š”

๐Ÿ“š ALGORITHM


๐Ÿ“š QUEUE & LIST

QUEUE๋ž€ ๋ฌด์—‡์ธ๊ฐ€ ?


์Šคํƒ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ์˜ ์œ„์น˜๊ฐ€ ์ œํ•œ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ
์•ž์—์„œ๋Š” ์‚ญ์ œ๋งŒ ํ•˜๊ณ  ๋’ค์—์„œ๋Š” ์‚ฝ์ž…๋งŒ ํ•œ๋‹ค.
์„ ์ž… ์„ ์ถœ ๊ตฌ์กฐ (FIFO)์ด๋‹ค.
ํ์— ์‚ฝ์ž…ํ•œ ์ˆœ์„œ๋Œ€๋กœ ์›์†Œ๊ฐ€ ์ €์žฅ๋œ๋‹ค.
Front๋Š” ๋จธ๋ฆฌ๋กœ ๋งˆ์ง€๋ง‰์œผ๋กœ ์‚ญ์ œ๋œ ์›์†Œ์ด๋‹ค.
Rear์€ ๊ผฌ๋ฆฌ๋กœ ์ €์žฅ๋œ ์›์†Œ์ค‘ ๋งˆ์ง€๋ง‰ ์›์†Œ์ด๋‹ค.
์‚ฝ์ž…์€ enQueue, ์‚ญ์ œ๋Š” deQueue ์ด๋‹ค.

java.util.Queue

  • ํ์— ํ•„์š”ํ•œ ์—ฐ์‚ฐ์„ ์„ ์–ธํ•ด ๋†“์€ ์ธํ„ฐํŽ˜์ด์Šค
  • LinkedList ํด๋ž˜์Šค๋ฅผ Queue ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„์ฒด๋กœ ๋งŽ์ด ์‚ฌ์šฉ

Queue queue = new LinkedList(); LinkedList์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ ์ค‘์— queue ๊ธฐ๋Šฅ๋งŒ ์ œํ•œ์—์„œ ์‚ฌ์šฉ
LinkedList๋Š” ๋งŽ์€ ๊ฒƒ๋“ค์˜ ์ธํ„ฐํŽ˜์ด์Šค ๊ฐ™์€ ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์ด ์žˆ๋‹ค.

QUEUE์˜ ์ฃผ์š” ๋ฉ”์„œ๋“œ

  • offer()
    Queue์— ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” ๋ฉ”์„œ๋“œ ( ๋งจ ๋’ค๋กœ )
  • poll()
    Queue์—์„œ ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฉ”์„œ๋“œ ( ๋งจ ์•ž์—์„œ )
  • isEmpty()
    Queue๊ฐ€ ๋น„์—ˆ์œผ๋ฉด true, ์•ˆ๋น„์—ˆ์œผ๋ฉด false๋ฅผ ๋ฐ˜ํ™˜
  • size()
    Queue์˜ ํฌ๊ธฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์ค€๋‹ค

QUEUE๋ฅผ ํ™œ์šฉํ•œ ๋ฌธ์ œ ์œ ํ˜•

  • BFS ( ๋Œ€ํ‘œ์ ์ธ ๊ฒฝ์šฐ )
  • ์บ์‹œ
  • ๋ฒ„ํผ
  • ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ

LIST์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€ ?

์ˆœ์„œ๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ถ”์ƒ์ž๋ฃŒํ˜•์ด๋‹ค. ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด๋„ ์ƒ๊ด€์—†๋‹ค.
๊ตฌํ˜„์•  ๋”ฐ๋ผ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

  • ์ˆœ์ฐจ ๋ฆฌ์ŠคํŠธ
    ๋ฐฐ์—ด์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋œ ๋ฆฌ์ŠคํŠธ
  • ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ
    ๋ฉ”๋ชจ๋ฆฌ์˜ ๋™์ ํ• ๋‹น์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ตฌํ˜„๋œ ๋ฆฌ์ŠคํŠธ

์ˆœ์ฐจ ๋ฆฌ์ŠคํŠธ

๊ตฌํ˜„ ๋ฐฉ๋ฒ•

1์ฐจ์› ๋ฐฐ์—ด์— ํ•ญ๋ชฉ๋“ค์„ ์ˆœ์„œ๋Œ€๋กœ ์ €์žฅ
๋ฐ์ดํ„ฐ์˜ ์ข…๋ฅ˜์™€ ๊ตฌ์กฐ์— ๋”ฐ๋ผ ๊ตฌ์กฐํ™”๋œ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋งŒ๋“ค์–ด ๋ฐฐ์—ด์— ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ ์ ‘๊ทผ

๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•ด ์›ํ•˜๋Š” ์œ„์น˜์˜ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฝ์ž… ์—ฐ์‚ฐ

์‚ฝ์ž… ์œ„์น˜ ๋‹ค์Œ์˜ ํ•ญ๋ชฉ๋“ค์„ ๋’ค๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค.
-> ๋นˆ์ž๋ฆฌ๋ฅผ ์ฑ„์›Œ์•ผ ํ•œ๋‹ค.

์‚ญ์ œ ์—ฐ์‚ฐ

์‚ญ์ œ ์œ„์น˜ ๋‹ค์Œ์˜ ํ•ญ๋ชฉ๋“ค์„ ์•ž์œผ๋กœ ์ด๋™ํ•ด์•ผ ํ•œ๋‹ค.
-> ๋นˆ์ž๋ฆฌ๋ฅผ ์ฑ„์›Œ์•ผ ํ•œ๋‹ค.

์ˆœ์ฐจ ๋ฆฌ์ŠคํŠธ์˜ ๋ฌธ์ œ์ 

  • ์ž๋ฃŒ์˜ ์‚ฝ์ž…/์‚ญ์ œ ์—ฐ์‚ฐ ๊ณผ์ •์—์„œ ์—ฐ์†์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๋ฐฐ์—ด์„ ์œ„ํ•ด ์›์†Œ๋“ค์„ ์ด๋™์‹œํ‚ค๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๋‹ค.
  • ์›์†Œ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๊ณ  ์—ฐ์‚ฐ ๊ณผ์ •์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚˜๋ฉด ์ž‘์—…์— ์†Œ์š”๋˜๋Š” ์‹œ๊ฐ„์ด ํฌ๊ฒŒ ์ฆ๊ฐ€ํ•œ๋‹ค.
  • ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ ์ •ํ•ด์ ธ ์žˆ๋Š” ๊ฒฝ์šฐ ์‹ค์ œ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ•ด์„œ ์ƒˆ๋กญ๊ฒŒ ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š” ์ž‘์—…์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๊ณ , ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ ๋ณด๋‹ค ํฌ๊ฒŒ ํ• ๋‹นํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ญ๋น„๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ( LinkedList )

์ž๋ฃŒ์˜ ๋…ผ๋ฆฌ์ ์ธ ์ˆœ์„œ์™€ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ๋ฌผ๋ฆฌ์ ์ธ ์ˆœ์„œ๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š๊ณ , ๊ฐœ๋ณ„์ ์œผ๋กœ ์œ„์น˜ํ•˜๊ณ  ์žˆ๋Š” ๊ฐ ์›์†Œ๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ํ•˜๋‚˜์˜ ์ „์ฒด์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด๋ฃฌ๋‹ค. ๋งํฌ๋ฅผ ํ†ตํ•ด ์›์†Œ์— ์ ‘๊ทผํ•˜๋ฏ€๋กœ, ์ˆœ์ฐจ ๋ฆฌ์ŠคํŠธ์˜ ๋ฌธ์ œ์  ์ค‘ ํ•˜๋‚˜์ธ ์ˆœ์„œ๋ฅผ ๋งž์ถ”๊ธฐ ์œ„ํ•œ ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.
์ž๋ฃŒ๊ตฌ์กฐ์˜ ํฌ๊ธฐ๋ฅผ ๋™์ ์œผ๋กœ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ์–ด, ๋ฉ”๋ชจ๋ฆฌ์˜ ํšจ์œจ์ ์ธ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๊ธฐ๋ณธ ๊ตฌ์กฐ

๋…ธ๋“œ

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์—์„œ ํ•˜๋‚˜์˜ ์›์†Œ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” building block
๊ตฌ์„ฑ์š”์†Œ๋Š” ๋ฐ์ดํ„ฐ ํ•„๋“œ์™€ ๋งํฌ ํ•„๋“œ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ํ•„๋“œ
    ์›์†Œ์˜ ๊ฐ’ ์ €์žฅ
  • ๋งํฌ ํ•„๋“œ
    ๋‹ค์Œ ๋…ธ๋“œ์˜ ์ฐธ์กฐ๊ฐ’์„ ์ €์žฅ
ํ—ค๋“œ

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ฐธ์กฐ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ์ข…๋ฅ˜

  • ๋‹จ์ˆœ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ( Singly Linked List )
    ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ๋งํฌ ํ•„๋“œ์— ์˜ํ•ด ๋‹ค์Œ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.
    ํ—ค๋“œ๊ฐ€ ๊ฐ€์žฅ ์•ž์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ๋งํฌ ํ•„๋“œ๊ฐ€ ์—ฐ์†์ ์œผ๋กœ ๋‹ค์Œ ๋…ธ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
    ๋งํฌ ํ•„๋“œ๊ฐ€ NULL์ธ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ์ด๋‹ค.

  • ์ด์ค‘ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ ( Doubly Linked List )
    ์–‘์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ ์ˆœํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•œ ๋ฆฌ์ŠคํŠธ
    ๋‘ ๊ฐœ์˜ ๋งํฌ ํ•„๋“œ์™€ ํ•œ ๊ฐœ์˜ ๋ฐ์ดํ„ฐ ํ•„๋“œ๋กœ ๊ตฌ์„ฑ

์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์˜ ๋ฌธ์ œ์ 

์ธ๋ฑ์Šค๊ฐ€ ์—†์–ด์„œ ํŠน์ • ์š”์†Œ์— ์ ‘๊ทผํ•˜๊ธฐ์—๋Š” ์ˆœ์ฐจ ํƒ์ƒ‰์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ํƒ์ƒ‰ ์†๋„๊ฐ€ ๋–จ์–ด์ง„๋‹ค.

์ฃผ์š” ๋ฉ”์„œ๋“œ

  • add()
    ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
  • addFirst()
    ๊ฐ€์žฅ ์•ž์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
  • addLast()
    ๊ฐ€์žฅ ๋’ค์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
  • remove()
    ๋ฐ์ดํ„ฐ ์‚ญ์ œ
  • removeFirst()
    ๊ฐ€์žฅ ์•ž์— ๋ฐ์ดํ„ฐ ์‚ญ์ œ
  • removeLast()
    ๊ฐ€์žฅ ๋’ค์— ๋ฐ์ดํ„ฐ ์‚ญ์ œ
  • clear()
    ๋ฐ์ด์ € ์ „๋ถ€ ์‚ญ์ œ
  • size()
    ๋ฆฌ์ŠคํŠธ ํฌ๊ธฐ
  • get(index)
    index ์œ„์น˜ ๊ฐ’ ๋ฆฌํ„ด
  • contains()
    ๊ด„ํ˜ธ ์•ˆ์˜ ๊ฐ’์ด ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ์ง€ ํ™•์ธ, ์žˆ์œผ๋ฉด true ,์—†์œผ๋ฉด false
  • indexOf()
    ๊ด„ํ˜ธ ์•ˆ์˜ ๊ฐ’์ด ์žˆ๋Š” ์ธ๋ฑ์Šค๊ฐ€ ์žˆ์œผ๋ฉด ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜, ์—†์œผ๋ฉด -1