[kotlin] 코틀린으로 덱 알고리즘 작성하기

덱(Deque)은 양쪽 끝에서 삽입과 삭제가 모두 가능한 자료구조입니다. 코틀린을 사용하여 덱 알고리즘을 작성하려면 다음과 같이 할 수 있습니다.

덱 클래스 정의하기

우선, 덱 클래스를 정의해야 합니다. 다음은 간단한 덱 클래스의 예시입니다.

class Deque<T> {
    private val deque = mutableListOf<T>()

    fun addFirst(item: T) {
        deque.add(0, item)
    }

    fun addLast(item: T) {
        deque.add(item)
    }

    fun removeFirst(): T? {
        return if (deque.isEmpty()) {
            null
        } else {
            deque.removeAt(0)
        }
    }

    fun removeLast(): T? {
        return deque.removeLastOrNull()
    }

    fun peekFirst(): T? {
        return deque.firstOrNull()
    }

    fun peekLast(): T? {
        return deque.lastOrNull()
    }

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

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

위의 코드에서는 MutableList를 사용하여 간단한 덱을 구현했습니다. addFirst, addLast, removeFirst, removeLast, peekFirst, peekLast, size, isEmpty 메서드를 제공하여 덱의 기본 동작을 구현하였습니다.

덱 활용하기

이제 덱을 사용해보겠습니다. 다음은 간단한 예시입니다.

fun main() {
    val deque = Deque<Int>()

    deque.addFirst(1)
    deque.addLast(2)
    deque.addFirst(3)

    println(deque.removeLast())  // 출력: 2
    println(deque.peekFirst())    // 출력: 3
    println(deque.size())         // 출력: 2

    deque.removeFirst()
    deque.removeLast()

    println(deque.isEmpty())      // 출력: true
}

위의 코드를 실행하면, 각 라인에 주석과 함께 주석에 해당하는 결과가 출력됩니다. 이렇게 코틀린으로 덱 알고리즘을 작성하고 활용할 수 있습니다.

덱은 머리(head)와 꼬리(tail) 양쪽에서 삽입과 삭제가 가능하기 때문에 다양한 알고리즘에서 유용하게 활용될 수 있습니다.

덱에 대한 더 많은 자세한 내용은 Kotlin Deque를 참고하세요.