Lecture 9-10: Sorting Algorithms
Quiz 3 – Next week (20%)
Sorting
Level : Leetcode easy
1 problem : Similar with our homework
1 problem : New
Similar with Quiz 1
Evaluation: Testcode
(if pass🡪 get the full score, otherwise 🡪 get 0 score)
Homework 1
Q. Can you implement this with selection sort with recursion?
- 재귀(recursion)을 이용하여 선택 정렬(selection sort) 구현하는 문제
- 기존 문제에서는 반복문 사용 -> 재귀적으로 바꾸기




Homework 2
Q. Please implement merge sort. (# TODO section below)
Homework 3 (Leetcode 268: Missing Number)

- 이 문제는 배열 nums에 있는 값을 바탕으로 주어진 범위 [0,n]에서 빠진 숫자를 찾는 것
문제 풀이 방법 1: 합 공식 사용
- 숫자 0부터 n까지의 합을 계산하고, 배열에 있는 숫자의 합을 뺌

- count 정렬: Time complexity O(n), Space complexity O(n)
- 새 인덱스 num[i]-min(num) 내에서 새 배열에 값을 할당: 시간 복잡도 O(n), 공간 복잡도 O(n)
- 총합 비교: 시간 복잡도 O(n), 공간 복잡도 O(1)

Homework 4 (Leetcode 179: Largest Number)

- 정수 배열 nums가 주어졌을 때, 배열의 숫자를 조합하여 가장 큰 수를 만들어 반환하기(반환되는 숫자는 문자열 형식, 조합된 숫자가 0으로 시작하지 않는다고 가정/ 배열이 모두 0으로 이루어진 경우 0을 반환)
문제 풀이 방법 1
- 숫자 비교 기준 : 숫자들을 문자열로 변환한 후, 두 문자열 x와 y를 비교할 때 x+y와 y+x중 더 큰 값이 만들어지면 x가 앞에 오도록!
- ex. 9+34 = 934, 34+9=349여서 9가 34보다 앞에 와야 한다
- Time complexity : O(nlog(n))

Homework 5 (Leetcode 56: Merge Intervals)

- 배열 intervals가 주어지며 각 요소는 [start, end] 형태의 구간에 있음. 이 구간들이 겹치는 경우를 병합하여 겹치지 않는 구간들만 반환하기
문제 풀이 방법 1
- 정렬
- 구간을 시작값 start를 기준으로 오름차순 정렬
- 정렬하면 겹치는지 확인하기 쉬움
- 병합
- 첫 번째 구간을 기준으로 시작해 다음 구간과 비교하며 병합할지 결정함
- 만약 현재 구간의 끝 값(end)이 다음 구간의 시작 값(start)보다 크거나 같다면 병합이 가능함
- 결과 저장
- 병합 가능한 구간은 하나로 합치고, 병합이 불가능하면 결과 리스트에 추가함

Lecture 11: PQ(Priority Queue) and Heap
MinHeap Class 정의하기
MinHeap


