본문 바로가기
[알고리즘] 병합 정렬 (Merge Sort) 병합 정렬이란 배열을 앞부분과 뒷부분 두 그룹으로 나누어 각각 정렬한 후, 다시 병합하는 작업을 반복하는 알고리즘입니다. 분할 정복(divide and conquer) 방법을 사용하여 문제를 해결합니다. 병합 정렬 예 [5, 3, 2, 1, 6, 8, 7, 4] #정렬하려는 배열 1. divide 1단계: [5] [3]을 병합하면 [3, 5] [2] [1]을 병합하면 [1, 2] [6] [8]을 병합하면 [6, 8] [7] [4]을 병합하면 [4, 7] 2단계: [3, 5] 과 [1, 2]을 병합하면 [1, 2, 3, 5] [6, 8] 와 [4, 7]을 병합하면 [4, 6, 7, 8] A : [1, 2, 3, 5] #정렬된 배열 B : [4, 6, 7, 8] #정렬된 배열 C : [] #정렬할 원소를 저.. 2022. 5. 2.
[알고리즘] 삽입 정렬 (Insertion Sort) 삽입 정렬이란? 삽입 정렬은 전체에서 하나씩 올바른 위치에 "삽입" 하는 방식입니다. 필요할 때만 위치를 변경하므로 선택 정렬보다 더 효율적인 방식입니다. 키 순으로 정렬된 사람들이 일렬로 서 있는데, 다음 원소가 정렬된 사람들 사이를 비집고 들어가는 방식입니다. 선택 정렬 예 예) [4, 6, 2, 9, 1] 1단계 : [4, 6, 2, 9, 1] #4 2 이므로 위치 변경, 4 > 2 이므로 위치 변경을 합니다. [2, 4, 6, 9, 1] 3단계 : [2, 4, 6, 9, 1] #6 < 9 이므로 위치 변경을 하지 않습니다. [2, 4, 6, 9, 1] 4단계 : [2, 4, 6,.. 2022. 4. 28.
[알고리즘] 선택 정렬(Selection Sort) 선택 정렬이란 선택해서 정렬하는 방식입니다. 예를 들면, 키 차이가 나는 사람들이 무작위 정렬해 있을 때 한번 쓱 훑어보고 키가 가장 작은 사람을 찾아 맨 앞으로 보냅니다. 그 다음 쓱 훑어봐서 두 번째로 작은 사람을 찾아 두번째에 배치합니다. 이 방법을 계속 반복하여 오름차순으로 정렬합니다. 선택 정렬 예 예) [4, 6, 2, 9, 1] 1단계 : [4, 6, 2, 9, 1] #제일 작은 수 1을 찾아 4와 교체 [1, 6, 2, 9, 4] 2단계 : [1, 6, 2, 9, 4] #1을 제외한 제일 작은 수 2를 찾아 6과 교체 [1, 2, 6, 9, 4] 3단계 : [1, 2, 6, 9, 4] #2를 제외한 제일 작은 수 4를 찾아 6과 교체 [1, 2, 4, 9, 6] 4단계 : [1, 2, 4,.. 2022. 4. 27.
[알고리즘] 버블 정렬 (Bubble Sort) 버블 정렬이란 1번째와 2번째 값을 비교, 2번째와 3번째 값을 비교, ... , n-1번째와 n번째 값을 비교하여 자료를 정렬하는 방식, 제일 큰 값을 맨 뒤로 보내며 정렬한다. n-1번째 값 n번째 값 이면 둘의 위치를 변경합니다. 버블 정렬 예 예) [4, 6, 2, 9, 1] 1단계 : [4, 6, 2, 9, 1] #4와 6을 비교, 4 2 이므로 위치를 변경 [4, 2, 6, 9, 1] 3단계 : [4, 2, 6, 9, 1] #6과 9를 비교, 6 1 이므로 .. 2022. 4. 26.
[알고리즘] 점근 표기법 점근표기법이란? 알고리즘의 성능을 수학적으로 표기하는 방법 알고리즘의 “효율성”을 평가하는 방법 빅오(Big-O) 표기법 - 최악의 성능이 나올 때 어느 정도의 연산량이 걸릴것인지 빅 오메가(Big-Ω) 표기법 - 최선의 성능이 나올 때 어느 정도의 연산량이 걸릴것인지 배열에서 특정 요소 찾기 길이가 6인 1차원 배열에서 '3'을 찾는 알고리즘의 시간 복잡도를 O(N)입니다. case 1의 경우, 첫번째 원소에서 '3'을 찾을 수 있습니다. case 2의 경우, 마지막 원소에서 '3'을 찾을 수 있습니다. 운이 좋지 않으면 input의 길이(N) 만큼 연산 이후에 답을 찾을 수 있습니다. array = [3, 5, 6, 1, 2, 4] # 길이(N)이 6인 배열 - case 1 array = [5, 6,.. 2022. 4. 25.
[알고리즘] 공간 복잡도 (Space Complexity) 공간 복잡도란? 알고리즘이 문제를 완전히 해결하는데 필요한 메모리 크기입니다. 입력값이 2배로 커졌을 때 문제를 해결하는 데 메모리가 몇 배나 커지는지 확인해야 하며 메모리를 적게 사용하는 알고리즘이 좋은 알고리즘입니다. 최빈값 찾기 알고리즘의 공간 복잡도 판단해보기 1. alphabet_array의 길이 = 26 max_occurrence, max_alphabet, occurrence 변수 = 3 29만큼의 공간을 사용 # a~z까지, 26개의 공간을 사용 alphabet_array = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "x", "y", ".. 2022. 4. 24.
[알고리즘] 시간 복잡도(Time Complexity) 시간 복잡도란? 알고리즘이 n개의 입력 데이터로 문제를 해결하는 데 걸린 시간을 뜻합니다. 입력값이 커지면 처리 시간이 몇 배로 늘어나는지 확인해야 하며, 처리 시간이 빠른 알고리즘이 좋은 알고리즘입니다. 최댓값 찾기 알고리즘의 시간 복잡도 판단해보기 1. 길이가 6인 1차원 배열의 원소를 순회하며 자신보다 큰 값을 모두 반환하는 코드입니다. 각 줄이 실행되는 것을 1번 연산된다고 생각하고 계산 for문(1) x for문(2) x if(3) 만큼 시간이 필요 array의 길이를 N이라고 표현 N의 크기에 따른 시간의 상관 관계를 시간복잡도라하므로 수식으로 표현 N x N x 상수 = 상수 x N^2 = N^2 (N을 무한히 큰 수라 생각하면 상수 생략 가능) array = [3, 5, 6, 1, 2, 4.. 2022. 4. 24.