์คํ์ "์๋๋ค"๋ ๊ฐ๋
๊ณผ ๊ฐ์ฅ ์ ์ด์ธ๋ฆฌ๋ ์๋ฃ๊ตฌ์กฐ๋ค. ๋ฐ์ดํฐ๋ฅผ ์ฐจ๊ณก์ฐจ๊ณก ์์ ์ฌ๋ฆฌ๋ ํํ๋ก ์ ์ฅํ๋ฉฐ ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ์ ๊ฑฐ๋๋ ํ์
์ ์ถ(LIFO, Last-In-First-Out) ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
์คํ์ ๊ตฌ์กฐ์ ์ผ๋ก ํ์ชฝ ๋(Top)์์๋ง ๋ฐ์ดํฐ์ ์ ๊ทผ, ์ฝ์ , ์ญ์ ๊ฐ ์ด๋ฃจ์ด์ง๋ค.
push(item): ์คํ์ ๋งจ ์์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ค. pop(): ์คํ์ ๋งจ ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๊ณ ๊ทธ ๊ฐ์ ๋ฐํํ๋ค. peek() ๋๋ top(): ์คํ์ ๋งจ ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ์ด๋ค ๊ฐ์ธ์ง ํ์ธ๋ง ํ๋ค. isEmpty(): ์คํ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์๊ณ ๋น์ด์๋์ง ์ฌ๋ถ๋ฅผ ๋
ผ๋ฆฌ๊ฐ(boolean)์ผ๋ก ๋ฐํํ๋ค. ์ฝ์
๋ฐ ์ญ์ (push, pop)
์คํ์ ํญ์ ์ต์๋จ์์๋ง ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ๋ฏ๋ก ๋ฐ์ดํฐ์ ๊ฐ์์ ์๊ด์์ด O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
ํ์
ํน์ ์์๋ฅผ ์ฐพ์ผ๋ ค๋ฉด ์ต์๋จ๋ถํฐ ์์ฐจ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํ์ธํด์ผ ํ๋ค. ๋ฐ๋ผ์ ์ต์
์ ๊ฒฝ์ฐ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ธํด์ผ ํ๋ฏ๋ก O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
์คํ์ ๋ฐ์ดํฐ์ ์์
์์๋ฅผ ์ถ์ ํ๊ณ ๊ฐ์ฅ ์ต๊ทผ์ ์ํ๋ก ๋๋์๊ฐ์ผ ํ๋ ๊ธฐ๋ฅ์ ์ฃผ๋ก ์ฌ์ฉ๋๋ค.
์คํ ์ทจ์ (Undo)
๋ฌธ์ ํธ์ง๊ธฐ ๋ฑ์์ ์ฌ์ฉ์๊ฐ ๊ฐ์ฅ ์ต๊ทผ์ ์คํํ ์์
๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ทจ์ํ๋ค.
์น ๋ธ๋ผ์ฐ์ ๋ฐฉ๋ฌธ ๊ธฐ๋ก
๋ค๋ก ๊ฐ๊ธฐ ๊ธฐ๋ฅ ์๋ ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ฐฉ๋ฌธํ ํ์ด์ง๋ถํฐ ์์๋๋ก ๋ก๋ํ๋ค.
ํจ์์ ์ฝ ์คํ (Call Stack)
ํ๋ก๊ทธ๋จ ์คํ ์ค ํจ์๊ฐ ํธ์ถ๋ ๋ ํด๋น ํจ์์ ์ง์ญ ๋ณ์์ ๋ณต๊ท ์ฃผ์ ๋ฑ์ ์ ์ฅํ๊ณ ํจ์ ์ข
๋ฃ ์ ์ด์ ์คํ ์์น๋ก ๋์๊ฐ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
์์ ๋ฐ ๊ดํธ ๊ฒ์ฌ
ํ๋ก๊ทธ๋๋ฐ ์ฝ๋๋ ์์์์ ์ด๋ฆฐ ๊ดํธ์ ๋ซํ ๊ดํธ์ ์ง์ด ์ฌ๋ฐ๋ฅด๊ฒ ๋ง๋์ง ๊ฒ์ฆํ ๋ ์ฌ์ฉ๋๋ค.
DFS (Depth-First Search, ๊น์ด ์ฐ์ ํ์)
๊ทธ๋ํ ํ์ ๊ณผ์ ์์ ๊น์ด๋ฅผ ์ฐ์ ์ ์ผ๋ก ํ์ํ ๋ ์คํ ๊ตฌ์กฐ๊ฐ ํ์ฉ๋ ์ ์๋ค.
[์ฐ์ต ๋ฌธ์ ๋งํฌ]
1. ์คํ
2. ๊ดํธ
3. ์ ๋ง๋๊ธฐ
4. ํ
ํ๋ ๋ฐ์ดํฐ๋ฅผ ์์๋๋ก ์ ์ฅํ๋ฉฐ ๊ฐ์ฅ ๋จผ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๊ฐ ๊ฐ์ฅ ๋จผ์ ์ ๊ฑฐ๋๋ ์ ์
์ ์ถ(FIFO, First-In-First-Out) ๋ฐฉ์์ผ๋ก ๋์ํ๋ค.
์ฆ ๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ฉฐ ๋ง์น ๋งคํ์์์ ์ค์ ์ ์ฌ๋์ด ๋จผ์ ํ๋ฅผ ๊ตฌ๋งคํ๊ณ ๋๊ฐ๋ ๊ตฌ์กฐ์ ๊ฐ๋ค.
ํ๋ ๊ตฌ์กฐ์ ์ผ๋ก ํ์ชฝ ๋(Rear)์์๋ ๋ฐ์ดํฐ์ ์ฝ์ , ๋ฐ๋์ชฝ ๋(Front)์์๋ ๋ฐ์ดํฐ์ ์ญ์ ๊ฐ ์ด๋ฃจ์ด์ง๋ค.
enqueue(item): ํ์ ๋งจ ๋ค์ ์๋ก์ด ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ค. dequeue(): ํ์ ๋งจ ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ๊ณ ๊ทธ ๊ฐ์ ๋ฐํํ๋ค. peek() ๋๋ front(): ํ์ ๋งจ ์์ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ๊ฑฐํ์ง ์๊ณ ์ด๋ค ๊ฐ์ธ์ง ํ์ธ๋ง ํ๋ค. isEmpty(): ํ์ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ์ง ์๊ณ ๋น์ด์๋์ง ์ฌ๋ถ๋ฅผ ๋
ผ๋ฆฌ๊ฐ(boolean)์ผ๋ก ๋ฐํํ๋ค. ์ฝ์
๋ฐ ์ญ์ (enqueue, dequeue)
์์น๋ฅผ ์ฐพ๋ ๊ณผ์ ์์ด ํ์ ์ ๋๋จ์์ ๋ฐ๋ก ์ฐ์ฐ์ด ์ํ๋๋ฏ๋ก ๋ฐ์ดํฐ์ ๊ฐ์์ ๋ฌด๊ดํ๊ฒ O(1)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
ํ์
ํน์ ์์๋ฅผ ์ฐพ๊ธฐ ์ํด์๋ ๋งจ ์๋ถํฐ ์์ฐจ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ํ์ธํด์ผ ํ๋ฏ๋ก ์ต์
์ ๊ฒฝ์ฐ O(n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
ํ๋ ์ฃผ๋ก ๋ฐ์ดํฐ๊ฐ ์
๋ ฅ๋ ์์๋๋ก ์์ฐจ์ ์ธ ์ฒ๋ฆฌ๊ฐ ํ์ํ ์ํฉ์ ์ฌ์ฉ๋๋ค.
์ด์์ฒด์ ์ ์์
์ค์ผ์ค๋ง
CPU๋ฅผ ํ ๋น๋ฐ๊ธฐ ์ํด ๋๊ธฐํ๋ ํ๋ก์ธ์ค๋ค์ด๋ ๋์คํฌ ์ค์ผ์ค๋ง ๋ฑ์ ์์๋๋ก ๊ด๋ฆฌํ๋ค.
ํ๋ฆฐํฐ ์ธ์ ๋๊ธฐ์ด (Spooling)
์ฌ๋ฌ ์ธ์ ์์ฒญ์ด ๋ค์ด์์ ๋ ๋จผ์ ์์ฒญ๋ ๋ฌธ์๋ถํฐ ์์ฐจ์ ์ผ๋ก ์ถ๋ ฅํ๋ค.
๋ฉ์์ง ํ (Message Queue)
์์คํ
๊ฐ ๋น๋๊ธฐ์ ์ธ ๋ฐ์ดํฐ ๊ตํ ํ๊ฒฝ์์ ํธ๋ํฝ์ ์ ์ดํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ์ ๋ฌํ๊ธฐ ์ํ ๋ฒํผ ์ญํ ์ ํ๋ค.
๋๋น ์ฐ์ ํ์ (BFS, Breadth-First Search)
๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ์์ ์์ ์ ์ ์ผ๋ก๋ถํฐ ๊ฐ๊น์ด ์ ์ ๋ถํฐ ์์๋๋ก ๋ฐฉ๋ฌธํ๊ธฐ ์ํด ํ๋ฅผ ํ์ฉํ๋ค.
[์ฐ์ต ๋ฌธ์ ๋งํฌ]
1. ํ
2. ์์ธํธ์ค ๋ฌธ์
3. ์นด๋1
4. ํ๋ฆฐํฐ ํ
