Skip to content

ํ (Queue) โ€‹

ํ(Queue)๋Š” ์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ํ๋Š” ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ์„ ์ž…์„ ์ถœ(FIFO, First In First Out)์˜ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

ํ์˜ ํŠน์ง• โ€‹

  • ์„ ์ž…์„ ์ถœ(FIFO): ๊ฐ€์žฅ ๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ๋จผ์ € ๋‚˜๊ฐ‘๋‹ˆ๋‹ค.
  • ์ˆœ์„œ ์œ ์ง€: ์ž…๋ ฅ๋œ ๋ฐ์ดํ„ฐ์˜ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
  • ์ œํ•œ๋œ ์ ‘๊ทผ: ํ•ญ์ƒ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋งŒ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ์—ฐ์‚ฐ โ€‹

queue

  • enqueue: ํ์˜ ๋’ค์ชฝ์— ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
  • dequeue: ํ์˜ ์•ž์ชฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • front: ํ์˜ ๊ฐ€์žฅ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • isEmpty: ํ๊ฐ€ ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

TypeScript ๊ตฌํ˜„ ์˜ˆ์‹œ โ€‹

typescript
class Queue<T> {
  private items: T[] = []

  // ํ๊ฐ€ ๋น„์—ˆ๋Š”์ง€ ํ™•์ธ
  isEmpty(): boolean {
    return this.items.length === 0
  }

  // ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
  enqueue(item: T): void {
    this.items.push(item)
  }

  // ๋ฐ์ดํ„ฐ ์ œ๊ฑฐ ๋ฐ ๋ฐ˜ํ™˜
  dequeue(): T | undefined {
    return this.items.shift()
  }

  // ์ฒซ ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ ํ™•์ธ
  front(): T | undefined {
    return this.items[0]
  }

  // ํ ์ถœ๋ ฅ
  print(): void {
    console.log(this.items.join(' '))
  }
}

// ์‚ฌ์šฉ ์˜ˆ์‹œ
const queue = new Queue<number>()
queue.enqueue(1)
queue.enqueue(2)
queue.enqueue(3)
queue.enqueue(4)
queue.enqueue(5)

queue.print() // ์ถœ๋ ฅ: 1 2 3 4 5

console.log(queue.dequeue()) // ์ถœ๋ ฅ: 1
console.log(queue.front()) // ์ถœ๋ ฅ: 2