ALGORITHM_QUEUE & LIST
๐ ALGORITHM
๐ QUEUE & LIST
QUEUE๋ ๋ฌด์์ธ๊ฐ ?
์คํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฝ์
๊ณผ ์ญ์ ์ ์์น๊ฐ ์ ํ์ ์ธ ์๋ฃ๊ตฌ์กฐ
์์์๋ ์ญ์ ๋ง ํ๊ณ ๋ค์์๋ ์ฝ์
๋ง ํ๋ค.
์ ์
์ ์ถ ๊ตฌ์กฐ (FIFO)์ด๋ค.
ํ์ ์ฝ์
ํ ์์๋๋ก ์์๊ฐ ์ ์ฅ๋๋ค.
Front๋ ๋จธ๋ฆฌ๋ก ๋ง์ง๋ง์ผ๋ก ์ญ์ ๋ ์์์ด๋ค.
Rear์ ๊ผฌ๋ฆฌ๋ก ์ ์ฅ๋ ์์์ค ๋ง์ง๋ง ์์์ด๋ค.
์ฝ์
์ enQueue, ์ญ์ ๋ deQueue ์ด๋ค.
java.util.Queue
- ํ์ ํ์ํ ์ฐ์ฐ์ ์ ์ธํด ๋์ ์ธํฐํ์ด์ค
- LinkedList ํด๋์ค๋ฅผ Queue ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๋ก ๋ง์ด ์ฌ์ฉ
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