๐๏ธ ์๋ฃ๊ตฌ์กฐ ๊ณต๋ถํ๊ธฐ 2 | ์คํ(stack) vs ํ(queue)
์คํ(stack)
์ด๋ ๊ฒ ์ฑ ์ด ๋ฌด๋๊ธฐ๋ก ์์ฌ์์ ๋, ๊ฐ์ฅ ๋ง์ง๋ง์ ์์ ์ฑ ์ ๊ฐ์ฅ ๋จผ์ ๊บผ๋ธ ํ์ ๋ค๋ฅธ ์ฑ ์ ๊บผ๋ผ ์ ์๋ค.
์คํ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ค์ด์จ ๊ฒ์ด ๊ฐ์ฅ ๋จผ์ ๋๊ฐ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค(LIFO : Last In, First Out).
๋ค๋ก๊ฐ๊ธฐ, ๊ณ์ฐ๊ธฐ ๋ฑ๋ ์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ ์์ด๋ค.
์ฌ๋ฌ๊ฐ์ง ๋ฉ์๋
stack์ ์ฃผ์ ๋ฉ์๋๋ก๋ push, pop, top/peek ๋ฑ์ด ์๋ค.
1. push : ์คํ๊ณต๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ง์ด๋ฃ๋(์ ์ฅํ๋) ๋ฉ์๋์ด๋ค.
2. pop : ์คํ๊ณต๊ฐ์ ์ต์๋จ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๋ ๋ฉ์๋์ด๋ค.
3. peek : ์ ์ผ ์ต๊ทผ์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ, ์ต์์ ๋ฐ์ดํฐ(top)๋ฅผ ์ฝ๋ ์์ ์ด๋ค. (๋ฐ์ดํฐ์ ์ํฅ์ ์ฃผ์ง ์๋๋ค)
์คํ ์๋ฃ๊ตฌ์กฐ ์ฝ๋๋ก ์์ฑํด๋ณด๊ธฐ
class Stack{
constructor(){
//๊ฐ์ฅ ์ต์๋จ์ ์ธ๋ฑ์ค ๊ฐ์ ๋ํ๋ด๋ this.top
//๊ฐ๋ค์ด ์ ์ฅ๋ this.storage = {};
}
push(element){
//์กฐ๊ฑด๋ฌธ์ผ๋ก this.storage์ this.top์ ๊ฐ์ด ์์ ๋, this.top์ ๊ฐ์ด ์์ ๋๋ก ๋ถ๊ธฐํด์ค๋ค.
//์๋ค๋ฉด this.top ++
//element๋ฅผ ์ถ๊ฐํ๋ค.
}
pop(){
//this.storage์ ์์๊ฐ ํ๋๋ผ๋ ์์ ์์๋ง pop์ด ์คํ๋๋๋ก ๋ถ๊ธฐํด์ค๋ค.
//์ญ์ ๋ ๊ฐ์ ๋ณ์์ ์ ์ฅํ๋ค.
//๊ฐ์ ์ญ์ ํ๋ค.
//this.top์ด 0์ด ์๋๋ผ๋ฉด this.top --
//์ญ์ ๋ ๊ฐ์ ๋ฆฌํดํ๋ค.
}
size(){
//this.storage์ ์์๊ฐ ํ๋ ์ด์ ์๋ค๋ฉด return this.top + 1 , ์๋ค๋ฉด 0์ ๋ฆฌํดํด์ค๋ค.
}
}
ํ(queue)
ํ๋ฆฐํฐ๋ก ์ธ์ํ ๋ ๋๊ธฐ์ด์ ์ธ์๋ฒํผ์ ๋๋ฅธ ์์๋๋ก ๋์จ๋ค.
๋์ด๊ณต์์ ์ค์ ์ฐ์ ๋, ๊ฐ์ฅ ์์ ์ฌ๋์ด ๊ฐ์ฅ ๋จผ์ ๋์ด๊ธฐ๊ตฌ๋ฅผ ํ๊ฒ ๋๋ค. ์ด๋ฌํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ํ๋ผ๊ณ ํ๋ค.
ํ๋ ๊ฐ์ฅ ๋จผ์ ๋ค์ด์จ ๊ฒ์ด ๊ฐ์ฅ ๋จผ์ ๋๊ฐ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. (FIFO : First In, First Out)
๋๋ถ๋ถ์ ์ ์ถ๋ ฅ์ด ํ์ ์๋ฃ๊ตฌ์กฐ๋ก ๋์ด์๋ค.
์ฌ๋ฌ๊ฐ์ง ๋ฉ์๋
ํ์ ๋ํ์ ์ธ ๋ฉ์๋๋ก๋ enqueue, dequeue ๋ฑ์ด ์๋ค.
1. enqueue : ํ์ ๊ฐ์ ์ง์ด๋ฃ๋ ๋ฉ์๋์ด๋ค.
2. dequeue : ํ์์ ๊ฐ์ฅ ๋จผ์ ๋ค์ด๊ฐ ๊ฐ์ ๋นผ๋ด๋ ๋ฉ์๋์ด๋ค.
3. ๊ทธ ์ธ์ size๋ฅผ ํ์ธํ๋ ๋ฉ์๋, ํ๊ฐ ๋น์ด์๋ ํ์ธํ๋ ๋ฉ์๋์ธ empty ๋ฑ์ด ์๋ค.
ํ ์๋ฃ๊ตฌ์กฐ ์ฝ๋๋ก ์์ฑํด๋ณด๊ธฐ
class Queue{
constructor(){
// ๊ฐ๋ค์ ์ ์ฅํ this.storage = {}
// ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค ๊ฐ this.first
// ๋ง์ง๋ง ์ธ๋ฑ์ค ๊ฐ this.top
}
enqueue(element){
//this.top์ด this.storage์ ์์ ๋๋ this.top++
// this.first์ ๊ฐ์ด this.top๋ณด๋ค ํด ๋๋ this.storage[this.first] ์ ๊ฐ์ผ๋ก element๋ฅผ
//๋ฃ์ด์ฃผ๊ณ ,
//์๋๋ผ๋ฉด this.storage์ this.top์ผ๋ก element๋ฅผ ๋ฃ์ด์ค๋ค.
}
dequeue(){
//์ญ์ ๋ ๊ฐ์ด ์๋ค๋ฉด
//์ญ์ ๋ ๊ฐ์ ๋ณ์์ ๋ด๊ณ
//๊ฐ์ ์ญ์ ํ๋ค.
//this.first์ ๊ฐ์ ++
//์ญ์ ๋ ๊ฐ์ return ํ๋ค.
}
size(){
// this.top์ด 0์ด ์๋ ๊ฒฝ์ฐ๋
//this.top๊ณผ this.first์ ์ฐจ๋ฅผ ๊ตฌํ๊ณ + 1์ ํด์ return ํ๋ค. (0์ด๋ฉด this.top)
}
}
์ฌ๋ฌ๊ฐ์ง ์ํฉ์์ ์ํฉ์ ๋ง๋ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ค์ํ๋ค. ์คํ๊ณผ ํ๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๊ณ ๊ฐ์ฅ ์ค์ํ ์๋ฃ๊ตฌ์กฐ ์ค ํ๋์ด๋ค. ์ด๋ฌํ ์๋ฃ๊ตฌ์กฐ๋ค์ ์ฝ๋๋ก ์ ์๋๋ ๊ฒ์ด ์๋ ํ๋์ ๊ท์น์ด๋ค.
๋ด๊ฐ ์ง์ ์ฝ๋๋ฅผ ์งค ๋ ๋ค๋ก๊ฐ๊ธฐ ๋ฑ์ ๊ธฐ๋ฅ์ ๋ฃ๊ณ ์ถ๋ค๋ฉด, ๊ทธ ๋ ์คํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ๋ ์ฌ๋ฆฌ๊ณ ๊ทธ ๊ท์น์ ํ์ฉํ์ฌ ์ฝ๋๋ฅผ ์ง๋ฉด ๋๋ค.
[์ฐธ๊ณ ์๋ฃ]