character간의 차이를 계산해야하는 경우가 있다. 예를 들어 'A'와 'B'는 1의 차이가 나고, 'A'와 'D'는 4의 차이가 난다. 이러한 경우에는 각 알파벳을 숫자로 치환해야하는데, 일일히 치환할 필요없이 파이썬의 'ord'라는 method를 사용하면 쉽게 계산할 수 있다! letters = "abyz" numbers = [] for letter in letters: number = ord(letter) - 96 numbers.append(number) print(numbers) >>> [1, 2, 25, 26] 위의 예시에서는 "abyz"라는 단어를 parse해서 각각의 알파벳을 정수로 나타낸다. a는 1, z는 26으로 표현된 것을 볼 수 있다. 96을 빼주는 이유는 알파벳은 97부터 리턴..
효율적인 알고리즘을 짜기 위해선 런타임과 메모리 사용을 최소화시키는 것이 중요하다. 그 중 런타임, 즉 시간 복잡도를 계산하는 법을 먼저 알아보겠다. 표기법 시간복잡도 표기 방식에는 아래와 같이 세가지가 있다. 최상의 경우: 오메가 표기법 (Big-Ω Notation) 최악의 경우: 빅오표기법 (Big-O Notation) 평균의 경우: 세타 표기법 (Big-θ Notation) 일반적으로 가장 많이 사용되는 것은 빅오 표기법이다. 빅오 표기법은 계수와 낮은 차수의 항을 제외시키는 방법이다. (예, 2n²-2n+2 > O(n^2)로 표기) 빅오 표기법이 개발자들에게 중요한 이유는, 최악의 경우를 대비해서 알고리즘을 짜야하기 때문이다. 빅오 표기법에 가장 큰 영향을 미치는 것은 input의 개수이다. In..
Tree를 순회하는 방법에는 세가지가 있다. 1. Pre-order Traversal (전위순회법) Root node에서 시작하여 왼쪽 부 트리를 순회하고 가장 마지막의 부트리까지 순회한다 오른쪽 부 트리를 순회하고 가장 마지막의 부트리까지 순회한다. DFS와 비슷한 논리라고 생각하면 쉽다. Pseudocode: Pre_order def pre_order(T): if T is not null: visit(T) pre_order(T.left) pre_order(T.right) 2. In-Order Traversal (중위 순회법) 트리의 가장 왼쪽 노드로 이동한다. 왼쪽 노드의 루트를 탐색한다. 루트의 오른쪽 노드를 탐색한다. 트리의 가장 왼쪽에 있는 노드부터 시작하여 탐색한다고 생각하면 이해가 쉽다. d..