본문 바로가기

Algorithm8

약수의 합 (JavaScript) 어떤 수를 입력받아 그 수의 약수를 모두 더하는 함수 function sumDivisor(num) { var answer = 0; var i; for (i = 1; i 2018. 1. 5.
최대공약수와 최소공배수 (JavaScript) 두 수를 입력받아 두 수의 최대공약수와 최소공배수를 반환해주는 함수(배열의 맨 앞에 최대공약수, 그 다음 최소공배수를 넣어 반환) function gcd(a, b) { if (a % b == 0) { return b; } else { return gcd(b, a % b); } } function gcdlcm(a, b) { var answer = []; answer[0] = gcd(a, b); answer[1] = (a * b) / answer[0]; return answer; } console.log(gcdlcm(19, 23)); 2018. 1. 5.
Heap Sort (힙 정렬) 힙 정렬은 최대 힙 트리나 최소 힙 트리를 구성해 정렬하는 방법으로, 내림차순 정렬을 위해서는 최대 힙을 구성하고, 오름차순 정렬을 위해서는 최소 힙을 구성하면 된다. 힙 정렬은 아래와 같은 방식으로 동작한다. 1. n개의 노드에 대한 완전 이진 트리를 구성한다. 2. 최대(최소) 힙을 구성한다. 3. 가장 큰(작은) 수를 가장 작은(큰) 수와 교환한다. 4. 2와 3을 반복한다. 완전 이진 트리를 구성하는 예를 아래 그림과 같다. 구현된 Class는 아래와 같다. class HeapSort{public static void heapSort(int[] arr){int heapSize = arr.Length;​for (int i = (heapSize - 1) / 2; i >= 0; i--){maxHeapi.. 2016. 3. 19.
Marge Sort (합병 정렬) 합병 정렬은 비교 기반 정렬의 알고리즘으로 분할 정복 알고리즘의 하나이다. 합병 정렬은 아래와 같이 동작한다. 1. 리스트의 길이가 0 또는 1이면 이미 정렬된 것으로 본다. 그렇지 않은 경우에는 2. 정렬되지 않은 리스트를 절반으로 잘라 비슷한 크기의 두 부분 리스트로 나눈다. 3. 각 부분 리스트를 재귀적으로 합병 정렬을 이용해 정렬한다. 4. 두 부분 리스트를 다시 하나의 정렬된 리스트로 합병한다. 아래 그림을 보면 이해가 빠를 듯 하다. 구현된 Class는 아래와 같다. class MergeSort{private void merge(int[] arr, int startPoint, int midPoint, int endPoint){int n1 = midPoint - startPoint + 1;int.. 2016. 3. 19.