์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ๋ธ๋ก๊ทธ
- Gatsby
- ๋ฐ๋ธ์ฝ์ค
- position
- ํ๋ก๊ทธ๋๋จธ์ค
- ์๋ฐ์คํฌ๋ฆฝํธ
- float
- history api
- ์ฝ๋ฉํ ์คํธ
- useRef
- fetch API
- CSS
- ๋ฐ๋ธ์ฝ์ค3๊ธฐ
- ์๊ณ ๋ฆฌ์ฆ
- Props
- useEffect
- ํ๋ก ํธ์๋
- Flex
- REACT
- Today
- Total
Daehyunii's Dev-blog
11 ํต ์ ๋ ฌ ๋ณธ๋ฌธ
11.1 ํต ์ ๋ ฌ ์๊ฐ
ํต ์ ๋ ฌ์ ๋งค์ฐ ๋น ๋ฅด๊ณ ํจ์จ์ ์ธ ์ ๋ ฌ ๋ฐฉ์์ด๋ค. ์ฌ๊ท๋ฅผ ํตํด ํด๊ฒฐํ๊ธฐ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค. ์ฐ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ 0๊ฐ ๋๋ 1๊ฐ์ ํญ๋ชฉ์ด ๋จ์ ๋๊น์ง ๋ถํ ํ์ฌ ๊ฐ๋ณ์ ์ผ๋ก ํผ๋ฒ๊ฐ๋
์ ํตํด ์ ๋ ฌ๋๋ ๋ฐฉ์์ด๋ค. ์ฆ ๋น๊ตํ๋ ์์๊ฐ ํ๋๋ง ์๋ค๋ฉด ์ด๋ฏธ ์ ๋ ฌ์ด ๋ ๊ฒ์ด๋ค. ํต ์ ๋ ฌ์ ์์ด์ ๊ฐ์ฅ ์ค์ํ ๊ฐ๋
์ ํผ๋ฒ์ด๋ค. ํต ์ ๋ ฌ์ ํผ๋ฒ ํฌ์ธํธ๋ผ ๋ถ๋ฆฌ๋ ๋จ์ผ ์์๋ฅผ ์ ํํ๊ณ ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ์์
์ ์ํํ๋ค.
์๋ฅผ ๋ค์ด ํผ๋ฒ ํฌ์ธํธ๋ฅผ ๊ฐ์ด๋ฐ ์๋ ์์๋ก ์ ํ๋ค๋ฉด ํ ์ผ์ ํด๋น ์ซ์๋ณด๋ค ์์ ์ซ์๋ฅผ ์ผ์ชฝ์ผ๋ก ์ฎ๊ธฐ๊ณ ํผ๋ฒ ํฌ์ธํธ๋ณด๋ค ํฐ ์ซ์๋ ์ค๋ฅธ์ชฝ์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ๋๋ค๋ฉด ํผ๋ฒ ์ซ์ ํ๋๋งํผ์ ์ฌ๋ฐ๋ฅธ ์์น์ ์ ๋ ฌ์ด ๋๋ค. ์ค์ํ๊ฒ์ ๊ทธ ํผ๋ฒ ํฌ์ธํธ ์ซ์ ํ๋๋ง ์ณ๋ฐ๋ฅธ ์์น์ ์ ๋ ฌ๋ ๊ฒ์ด๋ค. ํผ๋ฒ ํฌ์ธํธ์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ์ ์์นํ ์์๋ค์ ์ ๋ ฌ์ํ๋ ์ ์ ์๋ค. ํ์ง๋ง ํ์คํ๊ฑด ํผ๋ฒ ํฌ์ธํธ๊ฐ ๊ฐ๋ฆฌํค๋ ์์ ๋งํผ์ ์ ํํ ์์น์ ์ ๋ ฌ๋์๋ค๋ ๊ฒ์ด๋ค. ์ด ์์
์ ๋ฐ๋ณตํ์ฌ ๋ฐฐ์ด์ ์ ๋ ฌํ๋ ๋ฐฉ์์ด ํต ์ ๋ ฌ์ด๋ค.
11.2 ํผ๋ฒ helper ํจ์ ๊ตฌํ
ํผ๋ฒ ํฌ์ธํธ๋ ํํฐ์
์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ์ด๋ค. ๋ฐฐ์ด์ด ์ฃผ์ด์ง๋ฉด ํน์ ์์๋ฅผ ํผ๋ฒ ํฌ์ธํธ๋ก ์ง์ ํ์ฌ ๋ฐฐ์ด ์ ์์๋ฅผ ์ฌ๋ฐฐ์น ํ๋ ํจ์๋ฅผ ๋จผ์ ๊ตฌํํด์ผ ํ๋ค. ํผ๋ฒ๋ณด๋ค ์์ ๊ฐ๋ค์ ๋ชจ๋ ์ผ์ชฝ์ผ๋ก, ํผ๋ฒ๋ณด๋ค ํฐ ๊ฐ๋ค์ ๋ชจ๋ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋์ํจ๋ค. ์์ ๋งํ์ง๋ง ์์ชฝ ์์์์ ์์๋ ์ค์ํ์ง ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ฃผ์ํด์ผ ํ ์ ์ ํผ๋ฒ์ด ์ ์๋ฆฌ์์ ์ํํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ ๋ฐฐ์ด์ ๋ง๋ค์ด์๋ ์๋๋ค. ์ฆ ํผ๋ฒ ํฌํผ ํจ์๋ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํด์ผ ํ๋ค. ์ด ์ ์ด ์ ์ผ ์ค์ํ ์ ์ด๋ค.
์์ฌ์ฝ๋
1. ํผ๋ฒ ํจ์๋ ๋ฐฐ์ด, ์์์ธ๋ฑ์ค, ๋์ธ๋ฑ์ค ์ฆ ์ธ ๊ฐ์ ์ธ์๋ฅผ ๋ฐ๋๋ค.
2. ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์์์ธ๋ฑ์ค๋ 0, ๋์ธ๋ฑ์ค๋ ๋ฐฐ์ด๊ธธ์ด-1 ์ด๋ค.
3. ๊ทธ ๋ค์ ๋ฐฐ์ด ์์ ๋ถ๋ถ์์ ํผ๋ฒ์ ์ ํํ๋ค.(๋ฌด์์ ์ ํ์ด ์ผ๋ฐ์ ์ด์ง๋ง, ํธ์๋ฅผ ์ํด ๊ฐ์ฅ ์์ ์๋ ์์๋ฅผ ํผ๋ฒ์ผ๋ก ์ง์ ํ๋ค.)
4. ํ์ฌ์ ํผ๋ฒ ์ธ๋ฑ์ค๋ฅผ ๋ณ์์ ์ ์ฅํ๋ค.
5. ๊ทธ ํ ๋ค์ ์์๋ค์ ๋น๊ตํ์ฌ ํผ๋ฒ์ ๋ฐ๋ ์์น๋ฅผ ๊ณ์ํด์ ํ์ธํ๋ค.
6. ํ์ธ์ ์ํด ์์๋ถํฐ ๋๊น์ง ๋์๊ฐ๋ ๋ฃจํ๋ฅผ ๋ง๋ ๋ค.
7. ์ดํด๋ณด๋ ์์๋ณด๋ค ํผ๋ฒ์ด ํด ๊ฒฝ์ฐ ํผ๋ฒ ์ธ๋ฑ์ค ๋ณ์์ +1์ ์ฆ๊ฐ์ํจ ํ ํ์ฌ ์ดํด๋ณด๋ ์์์ ๋น๋ฒ ์ธ๋ฑ์ค์ ์์๋ฅผ ๊ตํํ๋ค.
8. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์๋ ์ฒ์ ์์ํ๋ ํผ๋ฒ ์ธ๋ฑ์ค์ ๋น๊ต๋ฅผ ํตํด ์ฆ๊ฐ๋ ํผ๋ฒ ์ธ๋ฑ์ค๋ฅผ ์ค์ํ ํ ํผ๋ฒ ์ธ๋ฑ์ค๋ฅผ ๋ฐํํ๋ค.
function pivotHelper(arr, start = 0, end = arr.length -1){
function swap(arr, i, j){
temp = arr[i];
arr[j] = arr[i];
arr[i] = arr[j];
}
let pivot = arr[start];
let pivotIndex = start;
for(let i = start+1 ; i < arr.length ; i++){
if(pivot > arr[i]){
pivotIndex++;
swap(arr,pivotIndex,i);
}
}
swap(arr,start,pivotIndex);
return pivotIndex;
}
์ ํจ์๋ฅผ ํตํด์ ํผ๋ฒ ํฌ์ธํธ๋ก ์ง์ ๋ ์์ ๋งํผ์ ์ ํํ ์์น์ ์ ๋ ฌ๋ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๋น๋ฒ์ด ์ ๋ ฌ๋ ์์น ์ฆ, ์ธ๋ฑ์ค ๋ฒํธ๋ฅผ ๋ฐํํ๊ณ ์ด๋ฅผ ํ์ฉํ์ฌ ํต ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ์ ์๋ค.
function pivotHelper(arr, start = 0, end = arr.length -1){
function swap(arr, i, j){
temp = arr[i];
arr[j] = arr[i];
arr[i] = arr[j];
}
let pivot = arr[start];
let pivotIndex = start;
for(let i = start+1 ; i < arr.length ; i++){
if(pivot > arr[i]){
pivotIndex++;
swap(arr,pivotIndex,i);
}
}
swap(arr,start,pivotIndex);
return pivotIndex;
}
function quickSort(arr, left = 0, right = arr.length -1){
if(left < right){ // ํ์ ๋ฐฐ์ด์ด ํ๋์ ์์ ๊ธธ์ด์ ๋๋ฌํ์ ๋ ๋ฉ์ถ๋๊ฒ์
//ํ๋ ๋จ์ ์์๋ ์ ๋ ฌ์ด ๋ ์ํ์ด๋๊น ๊ทธ๋๋ก ๋ฐํํ๋ฉด ๊ทธ ์ ์ฒด ๋ฐฐ์ด์ ๋ฐํํ๋ฉด ๋จ
let pivotIndex = pivotHelper(arr, left, right) //3
//ํผ๋ฒ๊ธฐ์ค ์ผ์ชฝ ์์๋ค(ํผ๋ฒ์ ์ ๋ ฌ์ด ๋ ์ํ๋ ํฌํจ์ํค์ง ์์)
quickSort(arr,left,pivotIndex-1);
//ํผ๋ฒ๊ธฐ์ค ์ค๋ฅธ์ชฝ ์์๋ค(ํผ๋ฒ์ ์ ๋ ฌ์ด ๋ ์ํ๋ ํฌํจ์ํค์ง ์์)
quickSort(arr,pivotIndex+1,right);
}
return arr;
}
ํต ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์์ ๊ผญ ์ธ์งํด์ผ ํ ๋ถ๋ถ์ ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด ๋ด๋ ๊ฒ์ด ์๋๋ผ๋๊ฒ์ด๋ค!! ๊ณ์ํด์ arr๋ฐฐ์ด์ด ์กฐ๊ธ์ฉ ๋ฐ๋๋ ์ ๋ ฌ๋๋ ๊ฒ์ด๋ค!! ์ฆ ์ฝ๊ฒ ๋งํด ํผ๋ฒ ๊ธฐ์ค ์ผ์ชฝ ์์๋ค์ด quickSort์ฌ๊ทํจ์๋ฅผ ํตํด์ ํ๋์ ์์ ๊ธธ์ด์ ๋๋ฌํ๊ฒ ๋์์ ๋๊น์ง ๋ฐ๋ณต ๋ฐ๋ณตํ๋ฉด์ ์ ๋ ฌ๋๊ณ , ๊ทธ ํ ํผ๋ฒ ๊ธฐ์ค ์ค๋ฅธ์ชฝ ์์๋ค๋ ์ผ์ชฝ ์์๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฌ๊ท์ ์ฌ๊ท๋ฅผ ํตํด ์กฐ๊ธ์ฉ ์ ๋ ฌ๋๋ฉด์ ๋ฐํํ๊ณ ๋ฐํํ๊ณ ์ ๋ ฌ์ด ์๋ฃ๋๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ง๋ง์ ๋ชจ๋ ์ ๋ ฌ๋ ๋ฐฐ์ด์ ๋ฐํํ๋ ๊ฒ์ด๋ค. ์ ๋ง ๋ค์ ํ๋ฒ ๊ฐ์กฐํ์ง๋ง ํท๊ฐ๋ฆฌ๋ฉด ์๋๋๊ฒ์ด ์๋ก์ด ๋ฐฐ์ด์ ๋ง๋ค์ด ๋ด๋ ๊ฒ์ด ์๋๊ณ ์ธ์๋ก ์ ๋ฌ๋ ๋ฐฐ์ด์ ํผ๋ฒ๊ณผ ์ฌ๊ท๋ฅผ ํตํด ๊ณ์ํด์ ๋ณํ์์ผ ์ ๋ ฌ์ํค๋ ๋ฐฉ๋ฒ์ด๋ค!!!(์ด ๋ถ๋ถ์ด ๊ฐ์ฅ ํท๊ฐ๋ ธ์๋ค.)
ํต ์ ๋ ฌ์์ ํ๋ ์์์ผํ ํน์ง์ด ์๋ค๋ฉด ํต ์ ๋ ฌ์ ์ผ๋ฐ์ ์ผ๋ก O(nlog n)์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง์ง๋ง ์ต์
์ ๊ฒฝ์ฐ์๋ O(n^2) ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ฒ ๋๋ค. ๋ฐฐ์ด์ด ๋ชจ๋ ์ ๋ ฌ๋์ด ์๋ ์ํ์์ ํต ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ฉด ๊ทธ๋ ๊ฒ ๋ ์ ์๋ค.(์ฒซ ๋ฒ์งธ ์์นํ ์์๋ฅผ ํผ๋ฒ์ผ๋ก ํ๊ฒ ๋๋ฉด ๋ถํดํ๋ฉด์ ๋ชจ๋ ์์๋ค์ด ํ ๋ฒ์ฉ ํผ๋ฒ์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค.) ๊ทธ๋ ๊ฒ ๋๋ฌธ์ ์ค๊ฐ์ ์์นํด์ผ ํ ์์๋ฅผ ํผ๋ฒ์ผ๋ก ์์ํ๋ฉด ํด๋น ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ค. ํ์ง๋ง ํญ์ ๊ทธ๋ ๊ฒ ์ ํํ๋๊ฒ์ ์ฝ์ง ์์ผ๋ฏ๋ก ์์ ํ ์ํ์์ ๋ฒ์ด๋ ์๋ ์๋ค.
'๐ Language & CS knowledge > Algorithm & Data structure' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
14 ์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ (0) | 2022.08.13 |
---|---|
13 ๋จ์ผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (0) | 2022.08.12 |
10 ํฉ๋ณ ์ ๋ ฌ (0) | 2022.08.07 |
09 ์ฝ์ ์ ๋ ฌ (0) | 2022.08.07 |
08 ์ ํ ์ ๋ ฌ (0) | 2022.08.07 |