๐์ค๋ ๋ฐฐ์ด ๊ฒ
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ์ 2๊ฐ์ ์์ฐ์ ์ฌ์ด์ ์ต๋๊ณต์ฝ์๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ํ๋์ด๋ค.
์๋ฆฌ
1. ํฐ ์๋ฅผ ์์ ์๋ก ๋๋๋ค.
2. ๋๋จธ์ง๊ฐ 0์ด๋ฉด ์์ ์๊ฐ ์ต๋ ๊ณต์ฝ์
3. ๋๋จธ์ง๊ฐ 0์ด ์๋๋ผ๋ฉด ์์ ์๋ฅผ ๋๋จธ์ง๋ก ๋๋๋ค.
4. ๋๋จธ์ง๊ฐ 0์ด ๋ ๋๊น์ง ๋ฐ๋ณต.
์๋ฐ์คํฌ๋ฆฝํธ๋ก ๊ตฌํ
function gcd(a, b) {
const rest = a % b;
if (remainder === 0) return b;
return gcd(b, rest);
}
ํต ์ ๋ ฌ
: ๋ฐฐ์ด์ ์์๊ฐ 0๊ฐ ๋๋ 1๊ฐ์ ํญ๋ชฉ์ด ๋จ์ ๋๊น์ง ๋ถํ ํ์ฌ ๊ฐ๋ณ์ ์ผ๋ก ์ ๋ ฌ๋๋ ๋ฐฉ์
: ํ๋์ ์์๋ฅผ ์ ํํด์(pivot) ๊ทธ ์ซ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์์ ์๋ ์ผ์ชฝ์ผ๋ก, ํฐ ์๋ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ธด๋ค. ์ฎ๊ธฐ๋ ์ซ์๋ ์ ๋ ฌํ๋ ๊ฒ์ด ์๋๋ผ ๋จ์ํ ์ฎ๊ฒจ์ง๋ ๊ฒ์ด๊ณ ์ฌ๋ฐ๋ฅธ ์์น์ ์ ๋ ฌ๋๋ ๊ฒ์ ์ ํ๋ ํด๋น ์ซ์ ํ๋๋ฟ์ด๊ฒ ๋๋ ๊ฒ์ด๋ค.
Pivot Helper
๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ฉด ํผ๋ฒ ํฌ์ธํธ๋ก ์ง์ ํ์ฌ ๋ฐฐ์ด ์ ์์๋ฅผ ์ฌ๋ฐฐ์นํ๋ ํจ์
function swap(arr, i, j) {
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
function pivot(arr, start=0, end=arr.length+1) {
let pivot = arr[start];
let swapIdx = start;
for(let i = start + 1; i<arr.length; i++) {
if(pivot > arr[i]) {
swapIdx++;
swap(arr, swapIdx, i)
}
}
swap(arr, start, swapIdx);
return swapIdx;
}
ํต ์ ๋ ฌ ๊ตฌํ
function quickSort(arr, left = 0, rigth = arr.length - 1) {
if(left < right) {
let privotIndex = privot(arr, left, right)
quickSort(arr, left, privotIndex- 1);
quickSort(arr, privotIndex + 1, right);
}
return arr;
}
๋น ์ค ๋ณต์ก๋
best
๋ฐฐ์ด์ ๋ถํดํ ๋ log n๊ฐ๋ก ๋ถํด๋๋ค. O(log n)
๊ทธ๋ฆฌ๊ณ ํด๋น ๋ฐฐ์ด์์ ํผ๋ฒ์ ์ ํ ๋ O(n)์ผ๋ก ๋น๊ต๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ๋ฒ ์คํธ์ ๊ฒฝ์ฐ O(n log n)์ด ๋๋ค.
worst
๋ง์ฝ ๋ฐ์ดํฐ๊ฐ ์ด๋ฏธ ์ ๋ ฌ๋์ด ์๊ณ ํผ๋ฒ์ ์ฒซ๋ฒ์งธ ์์๋ก ์ฐพ์ ๋
์ด๋ฏธ ์ ๋ ฌ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ๊ฐ 2๊ฐ๋ก ๋ถํด๋์ง ์๊ณ ํ๋์ ํ์์์๋ก ๋๋ ์ง๋ค. ๋ฐ๋ผ์ 15๊ฐ๋ผ๋ฉด 15๋ฒ ๋ถํดํ๋ ์ . ๋ฐ๋ผ์ ๋ถํด๊ฐ O(n)๊ฑธ๋ฆฌ๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ๊ฐ ๋ถํดํ ๋๋ง๋ค O(n)์ ๋น๊ต๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ์ต์ ์ ๊ฒฝ์ฐ O(n^2)์ด ๊ฑธ๋ฆฐ๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ๋ฐ์ดํฐ๊ฐ ์ ๋ ฌ๋์ด ์๋ ๊ฒฝ์ฐ ํผ๋ฒ์ ์ฒซ ๋ฒ์งธ ์์๊ฐ ์๋๋ผ ๋ฌด์์ ๋๋ ์ค๊ฐ ์์๋ก ๊ณ ๋ฅด๋ฉด ๋๋ค.
๐ญ๋ฐฐ์ด ์
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ ๋ถ๋ช ์ ์ ํด๋ดค์ํ ๋ฐ ๋๋ฌด ์์ํ๋ค. ์ด๋ฐ ๊ฑด ์ข ์ธ์๋ฌ์ผํ ๊ฒ ๊ฐ๋ค! ์ฌ๊ท ๊ฐ์๋ ๋ฃ๊ณ ํ๋๊น ๊ทธ ์ ๋ณด๋ค ๊ฐ๋ ์ด ๋ ์ ์ดํด๋๋ ๊ฒ ๊ฐ์๋ค. ์ฌ๊ท..์กฐ๊ธ์ ์ต์ํด์ก์์ง๋ ? ใ ใ ๋ผ๊ณ ์๊ฐํ๋๋ ์๋์๋ค.
ํต ์ ๋ ฌ๋ ๊ฐ๋ ์ ์ดํด๊ฐ ๊ฐ๋๋ฐ ํผ์ ๊ตฌํํ๋ผ๊ณ ํ๋ฉด ๋ชปํ ๊ฒ ๊ฐ๋ค. ์ฌ๊ท ์ ๋ ๊ฒ ์ฐ๋ ๊ฑฐ ๋๋ฌด ์ด๋ ค์... ๊ทธ๋๋ ๊ฐ์ ๊ฐ์ด ๋ค์ผ๋ฉด์ ์ดํดํ๋ฉด ํผ์ ์ดํดํ ๋๋ณด๋ค ํจ์ฌ ์ ์ดํด๋๋ ๊ฒ ๊ฐ๋ค. ์ฝ๋๋ ๋ฐ๋ผ ์น๊ณ ์์ผ๋ก ๊ธ์จ๋ ์จ๋ณด๋ฉด์ ํ๋ฆ์ ์ ์ดํดํด๋๋ฉด ๋ค๋ฅธ ์๊ณ ๋ฆฌ์ฆ ๊ตฌํ ํ ๋๋ ๋์์ด ๋ ๊ฒ ๊ฐ๋ค!
'์ผ์ > Today I Learned' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
2023.04.14[๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ] (0) | 2023.04.14 |
---|---|
2023.04.12[๋น์ ์ด ์ปดํฌ๋ํธ, ํ๋ก์ ํธ ๋ฆฌํฉํ ๋ง] (0) | 2023.04.12 |
2023.03.29 [๊ฒ์ ์๊ณ ๋ฆฌ์ฆ, ๋ฒ๋ธ ์ ๋ ฌ] (0) | 2023.03.29 |
2023.02.08 (0) | 2023.02.08 |
2023.02.07 (0) | 2023.02.07 |