흔히 알고리즘을 공부하다보면 logN의 시간 복잡도를 심심치 않게 만나게 된다. 이미 대다수의 사람들이 트리를 사용할 때 시간 복잡도가 로그 값이 나온다는 사실에 대해서 알고 있을 것이다. 이때, 많은 사람들이 이 로그의 값이 어디에서 나오게 된 것인지 제대로 이해를 하지 않고, 단순히 암기를 하려고 한다. 사실, logN의 시간 복잡도가 나오는 이유는 그리 어렵지 않다. 예를 들어서 2개의 자식 노드를 가지는 이진 트리(binary tree)를 이용해서 M개의 값들 중에서 원하는 값을 찾는다고 해 보자. 처음에는 M개의 값들 모두 탐색 대상이지만, 루트 노드에서 첫 번째 자식 노드 층으로 이동하게 되면 그 수가 절반으로 줄게 된다. 이제 M/2개의 값들이 남게 되는데, 다시 한번 다음 자식 노드 층으로..