[kotlin] 큐(Queue) 자료 구조의 이해와 활용 방법

큐(Queue)는 데이터를 일시적으로 저장하는 자료 구조로, 데이터가 들어온 순서대로 처리되는 선입선출(FIFO, First-In-First-Out) 방식을 따릅니다. 즉, 가장 먼저 들어온 데이터가 가장 먼저 나가는 구조를 가지고 있습니다.

큐의 구조

큐는 일반적으로 배열(Array)이나 연결 리스트(Linked List)를 활용하여 구현됩니다. 배열 기반의 큐는 단순하고 빠르지만 크기가 고정되어 있고, 연결 리스트 기반의 큐는 크기가 동적으로 조절될 수 있지만 포인터를 사용하여 오버헤드가 발생할 수 있습니다.

큐의 활용 방법

1. 데이터 처리

큐는 데이터가 들어온 순서대로 처리해야 하는 상황에 유용하게 활용됩니다. 예를 들어, 프린터 대기열, 네트워크 패킷 전송, 작업 스케줄링 등의 경우에 큐가 사용됩니다.

2. BFS(Breadth-First Search) 알고리즘

그래프 탐색 알고리즘인 BFS에서 큐는 너비 우선 탐색을 구현하는 데 사용됩니다. BFS는 정점의 자식들을 방문하기 전에 형제들을 먼저 방문하는 알고리즘으로, 큐를 사용하여 구현됩니다.

Kotlin으로 큐 구현하기

class Queue<T> {
    private val items: MutableList<T> = mutableListOf()

    fun enqueue(item: T) {
        items.add(item)
    }

    fun dequeue(): T? {
        return if (!isEmpty()) items.removeAt(0) else null
    }

    fun peek(): T? {
        return items.getOrNull(0)
    }

    fun isEmpty(): Boolean {
        return items.isEmpty()
    }

    fun size(): Int {
        return items.size
    }
}

위의 코드는 Kotlin으로 간단한 큐를 구현한 것입니다. enqueue 함수를 사용하여 데이터를 큐에 추가하고, dequeue 함수를 사용하여 데이터를 큐에서 제거할 수 있습니다.

큐는 데이터의 순서에 따라 처리하는 상황에 유용하게 활용될 수 있으며, Kotlin을 사용하여 간단하게 구현할 수 있습니다.

이상으로 큐(Queue) 자료 구조의 이해와 활용 방법에 대해 알아보았습니다.

참고 문헌: Kotlin Documentation