ํ(Queue)
0. ์์ฝ
1. ๊ฐ์
JAVA ๋๋ ํ์ด์ฌ ๊ฐ์ ๊ฒฝ์ฐ ๋ด์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋ฅผ ์ ๊ณตํ๊ณ ์์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ ๊ฒฝ์ฐ์ ๊ทธ๋ ์ง ์๋ค. ๊ทธ๋์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ง์ ํ๋ฅผ ์์ฑํด์ผํ๋ค.
์ฌ์ค ์๋ฐ์คํฌ๋ฆฝํธ์์ ํ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ํ์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค. Array.shift()
๋ฉ์๋์ Array.pop()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค. ํ์ง๋ง ์ด๋ ๊ฒ ๋๋ฉด ์๊ฐ๋ณต์ก๋์์ ํ์ ํฐ ์ฐจ์ด๋ฅผ ๋ณด์ด๊ฒ ๋๋ค. ํ์์์ ์์ ์ ๊ฑฐ๋ ์๊ฐ๋ณต์ก๋ O(1)๋ฅผ ๋ฐ๋ฅด๊ฒ ๋๋๋ฐ ๋ฐฐ์ด์์์ Array.shift()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์์ ์ ๊ฑฐ๋ ์๊ฐ๋ณต์๋ O(n)๋ฅผ ๋ฐ๋ฅด๊ฒ ๋๊ธฐ ๋๋ฌธ์ด๋ค.
Array.shift()
๋ฉ์๋์ ๋ด๋ถ ๋ก์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์์์ ์ ๊ทผํ์ฌ ํด๋น ๊ฐ์ ๋ฐํํ๊ณ ๋ฐฐ์ด์์ ์ ๊ฑฐ
๊ธฐ์กด ๋ฐฐ์ด์์ ์ฒซ ๋ฒ์งธ ์์์ ๊ฐ์ ์ฌ๋ผ์ก์ง๋ง ๊ณต๊ฐ์ ์ฐจ์งํ๊ณ ์์
Array.shift()
๋ฉ์๋๋ ๊ณ์ํด์ ์ฒซ ๋ฒ์งธ ์์์ ์ ๊ทผํ ์์ ๋ฐ๋ผ์ ๋๋จธ์ง ๋ฐฐ์ด์ ์์๋ค์ ์์ผ๋ก ํ ์นธ์ฉ ๋น๊ฒจ์ฃผ๋ ๊ณผ์ ํ์
์ฆ ๋ง์ง๋ง์ ๊ณผ์ ์ ๋ํ ์ฐ์ฐ์ด ์ถ๊ฐ์ ์ผ๋ก ์๊ตฌ๋๋ค. ์ด๋ฌํ ์ถ๊ฐ์ ์ธ ์ฐ์ฐ์ผ๋ก ์ธํด ์ฝ๋ฉ ํ ์คํธ ๋ฌธ์ ์์ ๋ฐ์ดํฐ์ ์์ด ๋งค์ฐ ํฐ ๊ฒฝ์ฐ, ์๊ฐ ๋ณต์ก๋๋ฅผ ๋งค์ฐ ์ธ์ธํ๊ฒ ๊ด๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ์๋ ๋ฐฐ์ด๋ก ์ด์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํ๊ฒ ๋๋ค๋ฉด ํต๊ณผํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ํ๋ฅผ ์ด์ฉํ์ฌ ๋ ๋น ๋ฅธ ์๊ฐ ๋ณต์ก๋๋ก ๋ฌธ์ ์ ์ ๊ทผํ๋ค๋ฉด ํต๊ณผํ ์ ์๋ ํ๋ฅ ์ด ์ฌ๋ผ๊ฐ ๊ฒ์ด๋ค.
์ฐธ๊ณ ํ ๋งํ ์ฝ๋ฉ ํ ์คํธ ๋ฌธ์
2. ํ๋?
FIFO(First in, First out) ์์น์ผ๋ก ๋ง๋ค์ด์ง ์๋ฃ๊ตฌ์กฐ๋ก ์๋ฐ์คํฌ๋ฆฝํธ ์์ง์์ ๋น๋๊ธฐ ํจ์ ์คํ์ ์ฝ๋ฐฑ๋ค์ด ๋๊ธฐ์ด๋ก ๋ค์ด์ค๋ Task queue
๊ฐ ๋ํ์ ์ธ ์์ด๋ค.
ํ๋ ๋์ด๊ณต์์์ ๋จผ์ ์จ ์ฌ๋์ด ๋์ด๊ธฐ๊ตฌ๋ฅผ ๋จผ์ ํ๋ ๊ฒ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋จผ์ ๋ฃ์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ค. ํ์ ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ์์๋ฅผ front
, ๋ ์์๋ฅผ rear
๋ก ๋ถ๋ฅด๋ฉฐ ๋ฐ์ดํฐ์ ์ ๊ทผ๋ฐฉ๋ฒ์ front
์ rear
๋ก๋ง ๊ฐ๋ฅํ๋ค. ๋ํ rear
์์๋ ์ฝ์
์ฐ์ฐ๋ง ์ผ์ด๋๊ณ , front
์์๋ ์ญ์ ์ฐ์ฐ๋ง ์ผ์ด๋๋ค.
ํ์์ ์ฌ์ฉ๋๋ ๋ฉ์๋๋ ์๋์ ๊ฐ์ด ์ ์ํ ์ ์๋ค.
dequeue:
front
๋ฅผ ์ ๊ฑฐํ๊ณ ๋ฐํํ๋ค.enqueue: ํ์ ์์๋ฅผ ์ถ๊ฐํ๋ค. ์ด๋ ํด๋น ์์๋
rear
๊ฐ ๋๋ค.contains: ํด๋น ์์๊ฐ ํ์ ์กด์ฌํ๋์ง ํ์ธํ์ฌ ์กด์ฌํ๋ฉด ํด๋น ์์๋ฅผ ๋ฐํํ๋ค.
3. ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ํ ๊ตฌํํ๊ธฐ
์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ํตํด ํ๋ฅผ ๊ตฌํํ๋ค.
3-1. ๋
ธ๋์ ํ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
๋ ธ๋์ ํ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์ ๋ค๋ฃจ์๋ ๋ด์ฉ๊ณผ ๊ฐ๋ค.
3-2. ํ๊ฐ ๋น์ด์๋์ง ํ์ธํ๊ธฐ
์๋ฐ์คํฌ๋ฆฝํธ์์ ์ซ์ 0
์ ๋ถ๋ฆฌ์ธ์ผ๋ก ๋ณํํ์ ๋ false
๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์ !
๋ฅผ ๋ถ์ฌ ture
๋ก ๋ฐ๊พธ์ด isEmpty
ํจ์๊ฐ ํ์ ์์๊ฐ ์์ ๊ฒฝ์ฐ true
๋ฅผ ๋ฐํํ๊ฒ ํ๋ค.
3-3. ํ์ ์์ ์ถ๊ฐํ๊ธฐ
ํ์ ์์๊ฐ ์์ ๊ฒฝ์ฐ ์๋กญ๊ฒ ์์ฑ๋
Node
๋ฅผfornt
๋ก ์ง์ ํ๋ค.ํ์ ์์๊ฐ ์์ ๊ฒฝ์ฐ ๊ธฐ์กด ํ์
rear.next
๋ฅผ ์๋กญ๊ฒ ์์ฑ๋Node
๋ก ์ง์ ํ๋ค.front
์rear
๋Node
์ด๋ค. ๊ทธ๋์ data ์์ฑ๊ณผ next ์์ฑ์ ๊ฐ์ง๋ค.๋ง์ง๋ง์ผ๋ก ์๋กญ๊ฒ ์์ฑ๋
Node
๋ฅผrear
๋ก ๋ฐ๊พธ๋ฉด ๋๋ค.(size
๋ ํ๋ ์ฌ๋ฆฌ์.)
3-4. ํ์ ์์ ์ ๊ฑฐํ๊ธฐ
ํ์
front
๋ฅผfrontQueue
์ ์ ์ฅํ๋ค.ํ๊ฐ ๋น์ด์๋ค๋ฉด ์๋ฌด๊ฒ๋ ๋ฆฌํดํ์ง ์๊ณ ํจ์๋ฅผ ์ข ๋ฃํ๋ค.
๊ธฐ์กด ํ์
front
๋ฅผfront.next
๋ก ์ง์ ํ๋ค.size
๋ฅผ ํ๋ ๊ฐ์์ํจ๋ค.๋ง์ฝ
size
๊ฐ 0์ด ๋๋ฉด ํ์ ์์๊ฐ ์๋ ๊ฒ์ด๋ฏ๋กrear
๋ฅผnull
๋ก ๋ฐ๊พธ์ด์ผ ํ๋ค.๋ง์ง๋ง์ผ๋ก ํ์์ ์ ๊ฑฐํ ์์์ธ
frontQueue
๋ฅผ ๋ฐํํ๋ค.
3-5. ํ์ ํด๋น ์์๊ฐ ์กด์ฌํ๋์ง ํ์ธํ์ฌ ์กด์ฌํ๋ฉด ํด๋น ์์๋ฅผ ๋ฐํํ๊ธฐ
cur
๋ฅผ ํ์front
๋ก ์ง์ ํ๋ค.๋ฆฌํดํ๊ฒ ๋ ๋ณ์
node
๋ฅผ ์ ์ธํ๋ค.node
์ ํ์ ์์๊ฐ ํ ๋น๋ ๋ ๊น์ง ๋ฐ๋ณต๋ฌธ์ ์คํํ๋ค.๋ง์ฝ
cur
์ดnull
์ด๋ผ๋ฉด ํด๋น ์์๊ฐ ์๊ธฐ ๋๋ฌธ์ ์๋ฌด๊ฒ๋ ๋ฐํํ์ง ์๊ณ ํจ์๋ฅผ ์ข ๋ฃํ๋ค.cur
์ดnull
์ด ๋๋ค๋ ๊ฒ์ ํ์ ๋ชจ๋ ์์๋ฅผ ํ์ธํ๋ค๋ ๊ฒ์ด๋ค.cur.data
์contains
ํจ์์ ์ธ์๋ก ๋ฐ์data
๊ฐ ๊ฐ๋ค๋ฉดnode
์cur
๋ฅผ ํ ๋นํ๋ค.node
์cur
๋ฅผ ํ ๋นํ๊ฒ ๋๋ฉดnode
๋null
์ด ์๋๊ธฐ ๋๋ฌธ์ ๋ฐ๋ณต๋ฌธ์ ๋ ์ด์ ์คํ๋์ง ์๋๋ค.ํ์ง๋ง ๊ฐ์ง ์๋ค๋ฉด
cur
๋ฅผcur.next
๋ก ๋ฐ๊พธ์ด ๋ฐ๋ณต๋ฌธ์ ๊ณ์ ์คํํ๋ค.
3-6. ํ์ ๋ชจ๋ ์์ ์ถ๋ ฅํ๊ธฐ
3-7. ๋ฐฐ์ด์ ๋๊ฒจ ํ ์์ฑํ๊ธฐ
constructor
ํจ์๋ฅผ ์์ ๊ฐ์ด ์์ ํ์ฌ ์๋ก์ด ํ๋ฅผ ๋ง๋ค ๋array
๊ฐ ์ ๋ฌ๋๋ฉดenqueue
ํจ์๊ฐ ์คํ๋๊ฒ ํ๋ค.Array.forEach()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฐ์ด์ ๋ชจ๋ ์์๋ฅผ ํ์ ์์๋ก ๋ฃ๋๋ค.(์์์ ๋ถํฐ ์์๋๋ก)
4. ํ์ ์๊ฐ ๋ณต์ก๋
enqueue(์ถ๊ฐ): ํ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ํ์ ๋งจ ๋ค ์์(rear)์ ํ๋๋ฅผ ์ถ๊ฐํ๋ฉด ๋๋ค. ํ์ ๋ฌด์ํ ๋ง์ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ๋ ํ๋์ ๋ฐ์ดํฐ ์ฝ์ ์ ํ ๋ฒ์ด๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋๋ O(1)์ด ๋๋ค.
dequeue(์ญ์ ): FIFO์ ๋ฐ๋ผ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋ ๋ ํ์ ๋งจ ์ ์์(front)๊ฐ ์ญ์ ๋๋ ๊ฒ์ด๋ฏ๋ก ํ์ ํฌ๊ธฐ์ ์๊ด์์ด ์๊ฐ ๋ณต์ก๋๋ O(1)๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
contains(์ ๊ทผ๊ณผ ๊ฒ์): ํ์ ์ฒซ ๋ฒ์งธ ์์์ ์ ๊ทผ์ ์๊ฐ๋ณต์ก๋ O(1)๋ฅผ ๊ฐ์ง๋ค. ํ์ง๋ง ํ์ ์์ ์ ๊ทผ์ ํ์ ๋งจ ์ ์์(front)์์๋ง ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ n๋ฒ์งธ ์์์ ์ ๊ทผ์ ์ฒซ ๋ฒ์งธ ์์(front)๋ถํฐ ์ํํ๋ฏ๋ก ์๊ฐ ๋ณต์ก๋๋ O(n)๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค.
ํ (Queue)
O(1)
O(1)
O(1)
O(n)
O(n)
5. Conclusion
ํ๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌํ ํด๋ณด๋ฉด์ ์ด๋ค ์๋ฃ๊ตฌ์กฐ์ธ์ง ๊ณต๋ถํด๋ณด์๋ค. ํ์คํ ๋ฐฐ์ด๊ณผ๋ ๋ค๋ฅธ ํน์ง์ด ์๋ค. ์์์ ์ถ๊ฐ, ์ญ์ ๋ ๋น ๋ฅด์ง๋ง ์์์ ์ ๊ทผ, ๊ฒ์์ ๋๋ฆฌ๊ธฐ ๋๋ฌธ์ ์ํฉ์ ๋ง๋ ํ์ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ์ ํ์ ํด์ผ๊ฒ ๋ค. ์ด์ ์ ์ฝ๋ฉ ํ ์คํธ ๊ณต๋ถ๋ฅผ ํ๋ฉด์ ํ์๋ ๋ฌธ์ ๋ฅผ ์กฐ๊ธ ์์ ํ์๋ค. ๊ทธ ์ด์ ๋ ๊ทธ ๋ ๋จ์ํ ๋ธ๋ก๊ทธ์ ์๋ ํ ์์ฑํ๋ ํด๋์ค๋ฅผ ๋ณต์ฌ๋ถ์ฌ ๋ฃ๊ธฐ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ด๊ฐ ์ค์ค๋ก ๋ง๋ (๋ฌผ๋ก ๋ธ๋ก๊ทธ์ ํ์ ๋น๋ฆฐ๊ธด ํ์ง๋ง..) ํ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ณ ๋ฌธ์ ๋ ์ ํต๊ณผ๋๋ ๊ฒ์ ๋ณด๋ ์ฌ๋ฐ๊ณ ๋ฟ๋ฏํ๋ค.
์ฐธ๊ณ
[์๋ฃ๊ตฌ์กฐ] JS๋ก ๊ตฌํํ๋ ํ (Queue) [์๊ณ ๋ฆฌ์ฆ, ์๋ฃ๊ตฌ์กฐ] ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํ(Queue)๊ตฌํํ๊ธฐ (+๊ฐ๋ ์ดํด)
๐ 2022-09-02
Last updated