๐Queue(ํ)
Queue์ ์ ์
์ ์ถ(First In First Out: LIFO)์ ์๋ฃ๊ตฌ์กฐ
๋จผ์  ์
๋ ฅ๋ ๊ฐ์ด ์ ์ผ ๋จผ์  ์ถ๋ ฅ์ด ๊ฐ๋ฅํ ์๋ฃ๊ตฌ์กฐ
Stack๊ณผ ๋ค๋ฅด๊ฒ ์ค์ํ Keyword๋ #Front์ #Rear ์ด๋ค.
๊ทธ๋ฆฌ๊ณ  Stack์์๋ ๋ฐ์ดํฐ ์
๋ ฅ๊ณผ ์ถ๋ ฅ์ด Push/Pop์ด์์ง๋ง,
Queue์์๋ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ด์ฃผ๋ ๊ธฐ๋ฅ์ #Enqueue, ๋ฐ์ดํฐ๋ฅผ ๋ด๋ณด๋ด๋ ๊ธฐ๋ฅ์ #Dequeue

Queue(ํ)๊ฐ ์คํ๋  ๋ ์ถ์์  ์ด๋ฏธ์ง
Queue์ ๊ฒฝ์ฐ
๋ฐ์ดํฐ๋ฅผ ์๋ ๊ฒ์ ๋ฐฐ์ด ๋ฉ์๋๋ Push / ๋นผ๋ด๋ ๊ฒ์ Shift
Rear - Queue์ ๋ท๋ถ๋ถ์ ๋ปํ๋ค.
๋ฐ์ดํฐ๊ฐ ์ฝ์
๋  ์ Rear๋ ํ์นธ์ฉ ๋ค๋ก ์์นํ๋ค.

Front - Queue์ ์๋ถ๋ถ์ ๋ปํ๋ค.
๋ฐ์ด๊ฑฐ ์ญ์ ๋๋ฉด Front๊ฐ ํ์นธ์ฉ ๋ค๋ก ์์นํ๋ค.

> ๐ฑโ๐์ฌ์ฉ ์ฌ๋ก
๋๋น ์ฐ์  ํ์(BFS, Breadth-First Search) ๊ตฌํ (์๊ณ ๋ฆฌ์ฆ ๊ณต๋ถ ํ์)
์ฒ๋ฆฌํด์ผ ํ  ๋
ธ๋์ ๋ฆฌ์คํธ๋ฅผ ์ ์ฅํ๋ ์ฉ๋๋ก ํ(Queue)๋ฅผ ์ฌ์ฉ
 
๋
ธ๋๋ฅผ ํ๋ ์ฒ๋ฆฌํ  ๋๋ง๋ค ํด๋น ๋
ธ๋์ ์ธ์ ํ ๋
ธ๋๋ค์ ํ์ ๋ค์ ์ ์ฅ
 
๋
ธ๋๋ฅผ ์ ๊ทผํ ์์๋๋ก ์ฒ๋ฆฌ
 
์บ์(Cache) ๊ตฌํ
์ฅ์ : ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅ๋ ์์๋๋ก ์ฒ๋ฆฌํด์ผ ํ  ์ํฉ์ ์ ๋ฆฌ(ex. ์ํ ์์ ๋จ๋ง๊ธฐ)
๋จ์  : ํฌ๊ธฐ๊ฐ ์ ํ์ , ํ์ ์๋ถ๋ถ์ด ๋น์ฌ๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
 ๋ถ๊ฐ๋ฅ
๐Queue(Pseudo Code)
var QueueArr = [];			
QueueArr.push(element1);	  
QueueArr.push(element2);	  
QueueArr.shift();			 
console.log(QueueArr);		
QueueArr.length;			  
๐Queue(functional)
const Queue = function() {
  const someInstance = {};
  let front = 0;
  let rear = 0;
  let count = 0;
  
  const storage = {};
  
  someInstance.enqueue = function(value) {
    storage[rear] = value;
    rear++;
    count++;
  };
  someInstance.dequeue = function() {
    if (count > 0) {
      var deValue = storage[front];
      delete storage[front];
      front++;
      count--;
      return deValue;
    }
  };
  
  
  someInstance.size = function() {
    return count;
  };
  return someInstance;
};