JS Stack and Queue
Table of contents
์๋ฐ์คํฌ๋ฆฝํธ ์คํ๊ณผ ํ
์คํ(stack)
์คํ์ ๋ง์ง๋ง์ ์ฝ์ ๋ ํญ๋ชฉ๋ง์ ์ ๊ฑฐํ๊ณ ์ ๊ทผํ ์ ์๋ค. (ํ์ ์ ์ถ ; LIFO ; Last In First Out)
๋ฐฐ์ด๊ณผ ๋ค๋ฅด๊ฒ ๋ง์ง๋ง์ ์ถ๊ฐ๋ ํญ๋ชฉ ์ธ์๋ ์ง์ ์ ๊ทผํ ์ ์๋ค. ์ด๋ฐ์ ์ถ๊ฐ๋ ํญ๋ชฉ์ ์ ๊ทผํ๊ธฐ ์ํด์๋ ์ดํ์ ์ถ๊ฐ๋ ํญ๋ชฉ๋ค์ ์ ๊ฑฐํด์ผ ํ๋ค. ์ธ๋ฑ์ค๋ฅผ ํตํด ํญ๋ชฉ๋ค์ ์ ๊ทผํ ์ ์๋ค.
Peeking
์คํ์ ๋ง์ง๋ง์ ์ถ๊ฐ๋ ํญ๋ชฉ์ ๋ค์ฌ๋ค ๋ณด๋๊ฒ, ๋ง์ง๋ง์ ์ถ๊ฐ๋ ํญ๋ชฉ์ ์คํ์์ ์ ๊ฑฐํ์ง ์๊ณ ๋ฐํํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ๋ค๋ฅธ ๋ณ์์ ๋น๊ตํด ๋ง์ง๋ง์ ์ถ๊ฐ๋ ํญ๋ชฉ์ ์๋ฃ ๊ตฌ์กฐ์์ ์ ๊ฑฐํด์ผ ํ ์ง ๊ฒฐ์ ํ๊ธฐ ์ํด ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋: $O(1)$
์ฝ์
์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด์ ๋ฉ์๋์ธ push()
๋ฅผ ์ฌ์ฉํด ์ฝ์
ํ๋ค.
- ์๊ฐ ๋ณต์ก๋: $O(1)$
์ญ์
์๋ฐ์คํฌ๋ฆฝํธ ๋ฐฐ์ด์ ๋ฉ์๋์ธ pop()
๋ฅผ ์ฌ์ฉํด ์ญ์ ํ๋ค.
- ์๊ฐ ๋ณต์ก๋: $O(1)$
์ ๊ทผ
n๋ฒ์งธ ๋
ธ๋์ ์ ๊ทผํ๊ธฐ ์ํด์๋ pop()
์ n๋ฒ ํธ์ถํด์ผ ํ๋ค.
๋ฒํผ ์คํ์ ์ฌ์ฉํด ์ ๊ทผํ๋ ๊ฒ์ด ์์ ํ๋ค.
- ์๊ฐ ๋ณต์ก๋: $O(n)$
๊ฒ์
๋ฒํผ ์คํ์ ๋ง๋ค์ด ์๋ณธ ์คํ์ ๋ณ๊ฒฝํ์ง ์๊ณ pop()
์ ์ฌ์ฉํด ์ ๊ฑฐํ๋ฉฐ ๊ฒ์ํ๋ค.
- ์๊ฐ ๋ณต์ก๋: $O(n)$
ํ(queue)
ํ๋ ์ฒซ ๋ฒ์งธ๋ก ์ถ๊ฐ๋ ํญ๋ชฉ๋ง์ ์ ๊ฑฐํ๊ณ ์ ๊ทผํ ์ ์๋ค. (์ ์ ์ ์ถ ; FIFO ; First In First Out)
์คํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ํ ๋ฒ์ ํ ๊ฐ์ ํญ๋ชฉ๋ง ์ ๊ทผํ ์ ์๊ณ ์ฒ์ ์ถ๊ฐ๋ ํญ๋ชฉ ์ธ์๋ ์ ๊ทผํ ์ ์๋ค. ์ธ๋ฑ์ค๋ฅผ ํตํด ํญ๋ชฉ๋ค์ ์ ๊ทผํ ์ ์๋ค.
Peeking
ํ์์ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ์ ๊ฑฐํ์ง ์๊ณ ๋ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ๋ฐํํด์ผ ํ๋ค.
- ์๊ฐ ๋ณต์ก๋: $O(1)$
์ฝ์ (enqueue ; ์ธํ)
ํ์์ ์ฝ์
์ ์ธํ๋ผ ๋ถ๋ฅธ๋ค. ์๋ฃ ๊ตฌ์กฐ์ ๋ง์ง๋ง ์ฝ์
ํด์ผ ํ๊ธฐ ๋๋ฌธ์ push()
๋ฅผ ์ฌ์ฉํด ์ถ๊ฐํ๋ค.
- ์๊ฐ ๋ณต์ก๋: $O(1)$
์ญ์ (dequeue; ๋ํ)
ํ์์ ์ญ์ ๋ ๋ํ๋ผ ๋ถ๋ฅธ๋ค. ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ์ ๊ฑฐํ๊ณ ๋ฐํํด์ผ ํ๊ธฐ ๋๋ฌธ์ shift()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ค.
- ์๊ฐ ๋ณต์ก๋: $O(n)^3$
์ ๊ทผ
n๋ฒ์งธ ๋ ธ๋์ ์ ๊ทผํ๊ธฐ ์ํด์๋ dequeue๋ฅผ n๋ฒ ํธ์ถํด์ผ ํ๋ค. ๋ฒํผ ํ๋ฅผ ์ฌ์ฉํด ์ ๊ทผํ๋ ๊ฒ์ด ์์ ํ๋ค.
- ์๊ฐ ๋ณต์ก๋: $O(n)$
๊ฒ์
๋ฒํผ ํ๋ฅผ ๋ง๋ค์ด ์๋ณธ ํ์ ๋ณ๊ฒฝํ์ง ์๊ณ shift()
๋ฅผ ์ฌ์ฉํด ์ ๊ฑฐํ๋ฉฐ ๊ฒ์ํ๋ค.
- ์๊ฐ ๋ณต์ก๋: $O(n)$