코틀린

이번 글에서 다룰 내용 이전 글에서 Priority Queue가 무엇인지, 내부가 어떻게 이루어져 있는지, 시간 복잡도는 어떻게 되는지 다루었다. 이번 글에서는 Kotlin에서 실제로 Priority Queue를 어떻게 선언하고 사용할 수 있는지 다루고자 한다. PriorityQueue 클래스 사용해 PriorityQueue 초기화하기 Kotlin에서 Priority Queue를 사용하기 위해서는 java.util 패키지의 PriorityQueue 클래스를 사용하면 된다. PriorityQueue 클래스는 다음과 같이 초기화할 수 있다. val priorityQueue = PriorityQueue() PriorityQueue에 값 삽입 하기 PriorityQueue에 값을 추가하기 위해서는 offer 함..
Binary Search Tree 구현하기 이전 글에서 Binary Search Tree가 무엇인지에 대해 살펴보았다. 이번 글에서는 이를 직접 구현해보려고 한다. 구현할 Binary Search Tree의 요구사항은 다음과 같다. 중복을 허용하지 않는다. 이미 있는 값의 추가 요청이 들어오면 아무런 동작을 하지 않고 반환한다. 노드는 임의로 다음과 같이 구성한다. data class Node(var value: Int) { var left: Node? = null var right: Node? = null } insert 메서드 구현하기 새로운 노드를 추가할 때는 다음과 같은 순서를 따른다. 추가 요청이 들어온 노드를 생성한다.(새로운 노드) 루트 노드가 null인지 확인 후 null이라면 새로운 노드..
Binary Search Tree란? Binary Search Tree는 Binary Tree의 한 종류로써, 데이터를 저장하고 탐색하기 위한 자료 구조이다. Binary Search Tree는 각 노드가 특정한 값을 가지고 있고, 각 노드의 왼쪽 서브트리에는 노드의 값보다 더 작은 값의 노드들이, 오른쪽 서브트리에는 더 큰 값의 노드들이 위치하도록 만들어진다. 이러한 특성으로 인해 Binary Search Tree는 아래와 같은 특징을 가진다. 값들이 정렬되어 있는 Binary Tree 구조이다 : 특정 노드를 기준으로 해당 노드 왼쪽에 있는 노드들은 모두 해당 노드의 값보다 작은 값을 가지며, 해당 노드 오른쪽에 있는 노드들은 해당 노드의 값보다 큰 값을 가진다. 위와 같이 정렬되어 있어, Binar..
Kotlin의 LinkedList 알아보기 Kotlin은 Java의 LinkedList를 사용하며 다음의 특징을 가진다. 1. 첫 노드와 마지막 노드에 대한 포인터를 가지고 있다. /** * Pointer to first node. */ transient Node first; /** * Pointer to last node. */ transient Node last; 2. 크기에 대한 정보를 가지고 있어서 크기에 접근하기 위한 시간 복잡도가 O(1)이다. transient int size = 0; 3. Node는 이전 노드와 다음 노드에 대한 참조를 모두 가진다. private static class Node { E item; Node next; Node prev; Node(Node prev, E ele..
로그를 사용한 디버깅의 필요성 Kotlin Coroutines는 같은 Coroutine Builder(launch, async 등) 의 중괄호 내부의 코드들이 다른 스레드에서 실행될 수 있다. 예를 들어 아래 코드에서 "task1 : start" 는 메인 스레드에서 실행되지만, "task1 : end"는 DefaultExecutor 스레드에서 실행된다. import kotlinx.coroutines.* fun main() = runBlocking { val task1 = launch(Dispatchers.Unconfined) { log("task1 : start") delay(100) log("task1 : end") } val task2 = launch { log("task2 : start") dela..