์๋ฌด๋ฆฌ ์ฌ๊ต์ก์ ํ๋ค์ด ์ ๊ปด๋ ์ํ์ 70์ ์ ๋์ด๋ณธ ์ ์ด ์๋ ๋ด๊ฐ ๋๋ฌด ์ด๋ ค์์ ์์ฑํ๋ ๊ธ
์ฌ์ค log๋ ๋ญ์ง ์ ๋ชจ๋ฆ... ์ด์นด์ง
๋ก๊ทธ(log) : ์ด๋ค ์๋ฅผ ๋ง๋ค๊ธฐ ์ํด ๋ฐ์ ๋ช ๋ฒ ๊ฑฐ๋ญ์ ๊ณฑํด์ผ ํ๋์ง๋ฅผ ๋ํ๋ด๋ ์ํ์ ๊ฐ๋
\(a^x = n \) ์์ \(x\)๋ฅผ \(log_a(n)\)๋ก ํํํ๋ค.
1. ์๊ฐ๋ณต์ก๋ ์ ์

์๊ฐ๋ณต์ก๋๋ ์ ๋ ฅ๊ฐ(N)์ด ์ปค์ง์๋ก ์๊ณ ๋ฆฌ์ฆ์ ์ํ ์๊ฐ์ด ์ผ๋ง๋ ๋นจ๋ผ์ง๊ฑฐ๋ ๋๋ ค์ง๋์ง ํ์ธํ๋ ์งํ๋ฅผ ์๋ฏธํ๋ค.
์ ๋ ฅ ํฌ๊ธฐ n์ด ์ฆ๊ฐํจ์ ๋ฐ๋ผ ์ฐ์ฐ ํ์๊ฐ ์ฆ๊ฐํ๋ ์ฆ๊ฐ์จ(Growth Rate)๋ฅผ ์ํ์ ์ผ๋ก ํ๊ธฐํ๋ค. ์ด ์ฆ๊ฐ์จ์ ์ ๊ทผ์ ํ๊ธฐ๋ฒ(Aysmptotic Notation)์ ์ฌ์ฉํ๋๋ฐ, ๊ฐ๋ฐ์์ ๋๋ถ๋ถ ๋น ์ค(Big-O)ํ๊ธฐ๋ฒ์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ค.
| ํ๊ธฐ๋ฒ | ๊ธฐํธ | ์๋ฏธ | ์ฉ๋ |
| Big-O | O | ์ต์ ์ ๊ฒฝ์ฐ(์ํ) | ์๊ณ ๋ฆฌ์ฆ์ ์ฑ๋ฅ ๋ณด์ฅ์ ์ํด ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ |
| Big-Omega | Ω | ์ต์ ์ ๊ฒฝ์ฐ(ํํ) | ์๊ณ ๋ฆฌ์ฆ์ด ์๋ฌด๋ฆฌ ๋นจ๋ผ๋ ์ด๋ณด๋จ ๋๋ฆด ์ ์์์ ๋ํ๋ |
| Big-Theta | θ | ํ๊ท ์ ์ธ ๊ฒฝ์ฐ | ์ต์ ๊ณผ ์ต์ ์ ๊ฒฝ์ฐ๊ฐ ๋์ผํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉ |
์๊ฐ๋ณต์ก๋๋ฅผ ์๋ฉด ์ด๋ค ๊ฒ์ด ๋ ๋น ๋ฅธ ์ฝ๋์ธ์ง, ์ด๋๋ฅผ ๊ฐ์ ํด์ผ ํ๋์ง ํ๋จํ ์ ์๋ค.
2. ์ข ๋ฅ์ ํน์ง
์ฃผ์ ์๊ฐ ๋ณต์ก๋๋ ์ ๋ ฅํฌ๊ธฐ n์ ๋ํ ์ฐ์ฐ ํ์์ ์ฆ๊ฐ์จ์ ๋ฐ๋ผ ๋ถ๋ฅ๋๋ค. ์ฆ๊ฐ์จ์ด ๋ฎ์ ์๋ก(= ๊ทธ๋ํ๊ฐ ๊ฐํ๋ฅด์ง ์์์๋ก) ๋ ์ข์ ์ฑ๋ฅ์ ์๋ฏธํ๋ค.
1. \(O(1)\)
- ๋ช ์นญ : ์์ ์๊ฐ(Constant)
- ํน์ง : ์ ๋ ฅ ํฌ๊ธฐ์ ์๊ด ์์ด ์คํ์๊ฐ์ด ์ผ์ ํ๋ฉฐ, ๊ฐ์ฅ ๋น ๋ฆ
- ์์ : ๋ฐฐ์ด์์ ์ธ๋ฑ์ค๋ฅผ ํตํ ์์ ์ ๊ทผ, ํด์ ํ ์ด๋ธ ์กฐํ - ์์
2. \(O(log n)\)
- ๋ช ์นญ : ๋ก๊ทธ ์๊ฐ(Logarithmic)
- ํน์ง : ์ ๋ ฅ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐํ ๋ ์คํ ์๊ฐ์ ๋งค์ฐ ๋๋ฆฌ๊ฒ ์ฆ๊ฐ
- ์์ : ์ด์ง ํ์(Binary Search) - ์ด๋ถ ํ์
3. \(O(n)\)
- ๋ช ์นญ : ์ ํ ์๊ฐ(Linear)
- ํน์ง : ์ ๋ ฅ ํฌ๊ธฐ์ ์คํ ์๊ฐ์ด ์ ๋น๋กํ์ฌ ์ฆ๊ฐํจ
- ์์ : for๋ฃจํ๋ฅผ ํ๋ฒ ๋๋ฉฐ ๋ฐฐ์ด ์ ์ฒด๋ฅผ ์ํ - ํ๋ฒ ํ๊ธฐ
4. \(O(n \log n)\)
- ๋ช ์นญ : ์ ํ ๋ก๊ทธ ์๊ฐ(Linearithmic)
- ํน์ง : \(O(n)\) ๋ณด๋ค ๋๋ฆฌ์ง๋ง \(O(n^2) \) ๋ณด๋จ ๋น ๋ฆ. ์ค์ฉ์ ์ผ๋ก ์ข์ ์ฑ๋ฅ์ผ๋ก ๊ฐ์ฃผ๋จ
- ์์ : ๋ณํฉ ์ ๋ ฌ(Merge Sort), ํต ์ ๋ ฌ(Quick Sort) - ํจ์จ์ ์ ๋ ฌ
5. \(O(n^2)\)
- ๋ช ์นญ : ์ ๊ณฑ ์๊ฐ(Quadratic)
- ํน์ง : ์คํ ์๊ฐ์ด ์ ๋ ฅ ํฌ๊ธฐ์ ์ ๊ณฑ์ ๋น๋กํ์ฌ ์ฆ๊ฐํจ. ๋๋ฆฐ ํธ
- ์์ : ์ด์ค for ๋ฃจํ(Nested loops), ๋ฒ๋ธ ์ ๋ ฌ(Bubble Sort), ์ ํ ์ ๋ ฌ(Selection Sort) - ๋๊ฒน ๋ฐ๋ณต
6. \(O(2^n)\)
- ๋ช ์นญ : ์ง์ ์๊ฐ(Exponential)
- ํน์ง : ์ ๋ ฅ ํฌ๊ธฐ๊ฐ ์กฐ๊ธ๋ง ์ปค์ ธ๋ ์คํ ์๊ฐ์ด ๊ธฐํ๊ธ์์ ์ผ๋ก ๋์ด๋จ. ๋นํจ์จ์
- ์์ : ์ฌ๊ท๋ฅผ ์ด์ฉํ ํ๋ณด๋์น ์์ด, ์ผ๋ถ Brute-Force ๋ฐฉ์ - ์์ n์์๋ง ์ฌ์ฉ
7. \(O(n!)\)
- ๋ช ์นญ : ํฉํ ๋ฆฌ์ผ ์๊ฐ(Factorial)
- ํน์ง : \(O(2^n)\) ๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฒ ์ฆ๊ฐํจ. ๋งค์ฐ ๋นํจ์จ์
- ์์ : ์์ด์ ๊ณ์ฐํ๋ ๋ชจ๋ ๋ฌธ์ - ์์ n์์๋ง ์ฌ์ฉ
๊ฐ๋ฐ์๋ ์ผ๋ฐ์ ์ผ๋ก \(O(n \log n)\) ์ดํ์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง ์๊ณ ๋ฆฌ์ฆ์ ์ค๊ณํ๊ฑฐ๋ ์ ํํ๋ค. \(O(n^2)\) ์ด์์ ์ ๋ ฅ ํฌ๊ธฐ๊ฐ ์์ ๊ฒฝ์ฐ์๋ง ํ์ฉ๋๋ค.
3. ์ฝ๋์์ ์๊ฐ๋ณต์ก๋ ๋ณด๋๋ฒ
ํ์ค ํ์ค์ด ์ค์ํ ๊ฒ์ด ์๋, ์ ์ฒด ํ๋ฆ์ด N๊ณผ ์ด๋ป๊ฒ ๊ด๊ณ๋๋์ง๊ฐ ํต์ฌ์ด๋ค.
- ๋ฐ๋ณต๋ฌธ์ด ๋ช๊ฒน์ธ์ง ๋ณด๊ธฐ
- ๋ฐ๋ณต ๋ฒ์๊ฐ N์ ๋ฐ๋ผ ๋ณํ๋์ง ๋ณด๊ธฐ
- ์ฌ๊ท ํจ์๊ฐ N์ ์ด๋ป๊ฒ ์ค์ฌ๊ฐ๋ฉฐ ํธ์ถ๋๋์ง ๋ณด๊ธฐ
- ์ ๋ ฌ์ด๋ ํ์์ด ์์ฌ์๋ค๋ฉด ํน์ฑ์ ํ์ ํ๊ธฐ
์์
1๏ธโฃ ๋ฐ๋ณต๋ฌธ์ด ๋ช๊ฒน์ธ๊ฐ
\(O(n)\) : ๋ฐ๋ณต๋ฌธ ํ ๊ฒน
void printNum(int N) {
for (int i = 0; i < N, i++) {
System.out.println(i); // ์
๋ ฅ์ด ์ปค์ง๋ฉด ๋ฐ๋ณต ํ์๋ N๋งํผ ์ฆ๊ฐ
}
}
\(O(n^2)\) : ๋ฐ๋ณต๋ฌธ ๋ ๊ฒน
void nestedLoop(int N) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
System.out.println(i + ", " + j);
}
}
}
์ด ์คํ ํ์ : N * N = \(O(n^2)\)
2๏ธโฃ ๋ฐ๋ณต ๋ฒ์๊ฐ N์ ๋ฐ๋ผ ์ด๋ป๊ฒ ๋ณํ๋๊ฐ
\(O(1)\) : ๋ฒ์๊ฐ ๊ณ ์
void constantLoop () {
for (int i = 0; i < 100; i++) {
System.out.println(i);
}
}
์ ๋ ฅ ํฌ๊ธฐ์ ์๊ด ์์ด ์คํ ํ์๊ฐ ํญ์ 100๋ฒ = \(O(1)\)
\(O(log n)\) : ๋ฒ์๊ฐ ์ ๋ฐ์ฉ ์ค์ด๋ฆ = ์ด๋ถ ํจํด
void halfLoop (int N) {
while (N > 1) {
N = N / 2;
}
}
๋งค๋ฒ ์ ๋ ฅ์ ๋ฐ์ผ๋ก ์ค์ธ๋ค. ์ด๊ฒ ์ด์ง ํ์์ ์๋ฆฌ
3๏ธโฃ ์ฌ๊ท ํจ์๊ฐ N์ ์ด๋ป๊ฒ ์ค์ฌ๊ฐ๋๊ฐ
\(O(n)\) : ํ ๋จ๊ณ์ฉ ์ค์ด๋๋ ์ ํ ์ฌ๊ท
void linearRecursion (int n) {
if (n == 0) {
linearRecursion(n-1);
}
}
n → n-1 → n-2 → n-3 ..... → 0
n๋ฒ ํธ์ถ๋จ = \(O(n)\)
\(O(log n)\) : ์ด์ง ํ์ ์ฌ๊ท
int binarySearch (int[] arr, int target, int left, int right) {
if (left > right) return -1;
int mid = (left + right) / 2;
if (arr[mid] === target) return mid;
if (arr[mid] < target) {
// arr[mid]๊ฐ target๋ณด๋ค ์๋ค๋ฉด ์ผ์ชฝ์์ +1์นธ ์ด๋
return binarySearch(arr, target, mid + 1, right);
} else {
// arr[mid]๊ฐ target๋ณด๋ค ํฌ๋ฉด ์ค๋ฅธ์ชฝ์์ -1์นธ ์ด๋
return binarySearch(arr, target, left, mid - 1);
}
}
// ์ค์์ผ๋ก ๋ค๊ฐ๊ฐ๋ ๋๋
ํ์ ๋ฒ์๊ฐ ๋งค ์ฌ๊ท๋ง๋ค ์ ๋ฐ์ผ๋ก ์ค์ด๋ ๋ค.
\(O(n \log n)\) : ๋ณํฉ ์ ๋ ฌ ๊ตฌ์กฐ
๋ณํฉ์ ๋ ฌ(=ํฉ๋ณ ์ ๋ ฌ, Merge Sort)์ด๋?

๋ถํ ์ ๋ณต(Divide and Conquer)์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ก, ๋ฐ์ดํฐ๋ฅผ ์ ๋ฐ์ฉ ์ชผ๊ฐ์ด ์์๊ฐ ํ๋๋ง ๋จ์๋๊น์ง ๋๋ ๋ค ์ ๋ ฌ๋ ๋ถ๋ถ ๋ฆฌ์คํธ๋ค์ ๋ค์ ํฉ์น๋ฉด์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ
- ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ 0 ๋๋ 1์ด๋ฉด ์ด๋ฏธ ์ ๋ ฌ๋ ๊ฒ์ผ๋ก ๋ณธ๋ค. ๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ
- ์ ๋ ฌ๋์ง ์์ ๋ฆฌ์คํธ๋ฅผ ์ ๋ฐ์ผ๋ก ์๋ผ ๋น์ทํ ํฌ๊ธฐ์ ๋ ๋ถ๋ถ ๋ฆฌ์คํธ๋ก ๋๋๋ค.
- ๊ฐ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํฉ๋ณ ์ ๋ ฌ์ ์ด์ฉํด ์ ๋ ฌํ๋ค.
- ๋ ๋ถ๋ถ ๋ฆฌ์คํธ๋ฅผ ๋ค์ ํ๋์ ์ ๋ ฌ๋ ๋ฆฌ์คํธ๋ก ํฉ๋ณํ๋ค.


๐ท ๋ฐ์ผ๋ก ๊ณ์ ๋๋๋ ๊ณผ์ ์ด log n์ธ ์ด์
\(log n\) = " N์ด 1์ด ๋ ๋ ๊น์ง ๋ช๋ฒ์ ๋ฐ์ผ๋ก ์๋ผ์ผ ํ๋๊ฐ? "
์๋ฅผ ๋ค์ด,
- 16๊ฐ๋ผ๋ฉด
16 → 8 → 4 → 2 → 1
์ด 4๋ฒ ์๋ ธ์ผ๋๊น logโ 16 = 4 - 8๊ฐ๋ผ๋ฉด
8 → 4 → 2 → 1
์ด 3๋ฒ → logโ 8 = 3
๊ทธ๋ฌ๋๊น ๋ณํฉ ์ ๋ ฌ์ ๋ฐฐ์ด์ log n๋ฒ๋งํผ ๊น๊ฒ ์ชผ๊ฐ๋ ๊ตฌ์กฐ
๐ท๊ทธ๋ฐ๋ฐ ์ n์ ๊ณฑํ๋๊ฐ?
๋๋๋ ์์ ์ ๋น ๋ฅด์ง๋ง ํฉ์น๋ ์์ ์ ์๊ฐ๋ณด๋ค ๋ง์ด ๋ค๊ธฐ ๋๋ฌธ
๊ฐ ์ธต์์ ๋ฐฐ์ด ์ ์ฒด๋ฅผ ๋ค ์ค์บํด์ผ ํ๋ค.
๐ ์ชผ๊ฐ๋ ๊น์ด๋ log n
๐ ํ์ง๋ง “๊ฐ ์ธต๋ง๋ค” ํฉ์น๋ ๋ฐ O(n) ์๊ฐ์ด ๋ ๋ค
์ค์ ๋ก ์ด๋ ๊ฒ:
- ๋งจ ์ ์ธต: 8๊ฐ ๋ณํฉ → 8๋ฒ ๋น๊ต
- ๊ทธ ์๋ ์ธต: 4๊ฐ + 4๊ฐ → ์ด 8๋ฒ ๋น๊ต
- ๊ทธ ์๋ ์ธต: 2+2+2+2 → ์ด 8๋ฒ ๋น๊ต
- ๊ทธ ์๋ ์ธต: 1+1+1+1+1+1+1+1 → ์ด 8๋ฒ ๋น๊ต
์ฆ, ๊ฐ ์ธต์ด ์ ๋ถ n๋งํผ์ ์ผ์ด ํ์ํ๋ค.
void mergeSort(int[] arr, int left, int right) {
if (left > right) return;
int mid = (left + right) / 2;
// ๋ฌธ์ ๋ฅผ ๋ฐ์ผ๋ก ๋๋๋ ๋ถ๋ถ = 2๊ฐ์ T(n/2)
mergeSort(arr, left, mid);
mergeSort(arr, mid + 1, right);
// ๋ณํฉ ๊ณผ์
merge(arr, left, mid, right);
}
void merge(int[] arr, int left, int mid, int right) {
int[] temp = new int[right - left + 1]; // ํฉ์น ๊ฒฐ๊ณผ๋ฅผ ๋ด์ ์์ ๋ฐฐ์ด
int i = left; // ์ผ์ชฝ ๋ฉ์ด๋ฆฌ ์์์
int j = mid + 1; // ์ค๋ฅธ์ชฝ ๋ฉ์ด๋ฆฌ ์์์
int k = 0; // ์์ ๋ฐฐ์ด ์ธ๋ฑ์ค
// ๋ ๋ฉ์ด๋ฆฌ๋ฅผ ๋น๊ตํ๋ฉฐ ์์ ๊ฐ๋ถํฐ temp์ ๋ฃ๊ธฐ
while (i <= mid && j <= right) {
if (arr[i] <= arr[j]) {
temp[k] = arr[i];
i++;
} else {
temp[k] = arr[j];
j++;
}
k++;
}
// ์ผ์ชฝ ๋ฉ์ด๋ฆฌ์ ๋จ์ ์์๊ฐ ์์ผ๋ฉด ๊ทธ๋๋ก ๋ณต์ฌ
while (i <= mid) {
temp[k] = arr[i];
i++;
k++;
}
// ์ค๋ฅธ์ชฝ ๋ฉ์ด๋ฆฌ์ ๋จ์ ์์๊ฐ ์์ผ๋ฉด ๊ทธ๋๋ก ๋ณต์ฌ
while (j <= right) {
temp[k] = arr[j];
j++;
k++;
}
// temp ๋ฐฐ์ด ๋ด์ฉ์ ์๋ arr๋ก ๋๋ ค๋๊ธฐ
for (int t = 0; t < temp.length; t++) {
arr[left + t] = temp[t];
}
}
์ฌ๊ท์: \(T(n)\) = \(2T(n/2)\) + \(O(n)\) → \(O(n \log n)\)
4๏ธโฃ ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ(์ ๋ ฌ, ํ์ ๋ฑ)์ด ์์ฌ ์์ ๋ (ํฉ, ๊ณฑ ํ๋จ)
- ์์ฐจ์ ํฉ :์๋ก ๋ฐ๋ก ์คํ๋๋ ๋ธ๋ก์ ๋ํ๋ค
- ์ค์ฒฉ(ํฉ์ฑ) ๊ณฑ : ๋ด๋ถ๊ฐ ์ธ๋ถ ํ์์ ๋ฐ๋ผ ๋ฐ๋ณต๋๋ฉด ๊ณฑํ๋ค(ex. ๋ ์ค์ฒฉ for๋ฌธ)
A → B ์์๋ก ์คํ(๋ํ๊ธฐ → ํฐ ์ชฝ์ด ์ง๋ฐฐ)
void mixed1 (int N) {
for (int i = 0; i < N; i++); // O(N)
for (int j = 0; j < N; j++); // O(N)
}
// → O(N)
์ค์ฒฉ์ด๋ฉด ๊ณฑํ๊ธฐ
void mixex2 (int N, int M) {
for (int i = 0; i < N; i++) { // O(N)
for (int j = 0; j < M; j++) { // O(M)
System.out.println("Hi!");
}
}
}
// → O(N * M)
์์ธ ์ ๋ ฌ ๊ตฌ์กฐ \( n \log n + N → n \log n \)
void sortAndPrint (int[] arr) {
Arrays.sort(arr); // O(N log N)
for (int x : arr) { // O(N)
System.out.println(x);
}
}
// ์ต์ข
: → O(N log N)
4. ์ ์ค์ํ๊ฐ
- ์ฑ๋ฅ ์์ธก : ์ค์ ์ฝ๋๋ฅผ ์คํํ์ง ์๊ณ ๋ ๋๊ท๋ชจ ์ ๋ ฅ์ ๋ํ ์ฑ๋ฅ์ ์์ธกํ๊ฒ ํจ
- ์๊ณ ๋ฆฌ์ฆ ์ ํ : ๋์ผํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ์ฌ๋ฌ ์๊ณ ๋ฆฌ์ฆ ์ค ๊ฐ์ฅ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ์ ํํ๋ ๊ธฐ์ค์ ์ ๊ณต
- ๋ฆฌ์์ค ๊ด๋ฆฌ : ์๋ฒ ์์(CPU ์๊ฐ ๋ฑ) ์ฌ์ฉ์ ์ต์ ํํ์ฌ ๋น์ฉ์ ์ ๊ฐํ๊ณ ์๋น์ค ์๋ต ์๊ฐ์ ๊ฐ์ ํ ์ ์์
[์ฐธ๊ณ ์๋ฃ]
https://todaycode.tistory.com/45
์๊ฐ ๋ณต์ก๋๋?
1. ์๊ฐ ๋ณต์ก๋ 1-1. ์๊ฐ ๋ณต์ก๋๋? 1-2. Big-O ํ๊ธฐ๋ฒ 2. ์์ 2-1. O(1) 2-2. O(n) 2-3. O(n²) 2-4. O(n³) 2-5. O(nm) 2-6. O(2โฟ) 2-7. O(logn) 3. ๊ทธ ์ธ 3-1. ์์ํญ ๋ฌด์ 3-2. ์ํฅ๋ ฅ์ด ๋ฎ์ ํญ ๋ฌด์ 3-3. ๋๋ต์ ์ธ ์์์
todaycode.tistory.com
https://adjh54.tistory.com/186
[Java/์๊ณ ๋ฆฌ์ฆ] ์๊ฐ ๋ณต์ก๋, ๊ณต๊ฐ ๋ณต์ก๋, ๋น ์ค ํ๊ธฐ๋ฒ ์ดํดํ๊ธฐ
ํด๋น ๊ธ์์๋ ํจ์จ์ ์ธ ์๊ณ ๋ฆฌ์ฆ์ ๋ํ ์ค๊ณ ๋ฐ ๊ตฌํ๋ฐฉ๋ฒ๊ณผ ๊ด๋ จ๋ ์๊ฐ ๋ณต์ก๋์ ๊ณต๊ฐ ๋ณต์ก๋๋ฅผ ์ด์ฉํ๋ฉฐ ์ด๋ฅผ ํ๊ธฐํ๋ ๋น ์ค ํ๊ธฐ๋ฒ์ ๋ํด์ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ์์ฑํ ๊ธ์ ๋๋ค. 1) ์๊ฐ
adjh54.tistory.com
https://gmlwjd9405.github.io/2018/05/08/algorithm-merge-sort.html
[์๊ณ ๋ฆฌ์ฆ] ํฉ๋ณ ์ ๋ ฌ(merge sort)์ด๋ - Heee's Development Blog
Step by step goes a long way.
gmlwjd9405.github.io

'Computer Science๐งช > Data Structure, Algorithmโ๏ธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๋ฏธ๋๋งฅ์ค ์๊ณ ๋ฆฌ์ฆ, ์ํ-๋ฒ ํ ๊ฐ์ง์น๊ธฐ (0) | 2025.10.13 |
|---|