ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ํ์ด - ๋ฌธ์์ด ๋ด p์ y์ ๊ฐ์ / ํธ๋ํฐ ๋ฒํธ ๊ฐ๋ฆฌ๊ธฐ / ๋ฌธ์์ด ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋ฐฐ์นํ๊ธฐ / ์๋ฆฟ์ ๋ํ๊ธฐ / ๋ ๊ฐ ๋ฝ์์ ๋ํ๊ธฐ
์ฌ๊ท ํจ์ / ๊ธฐ์ ์กฐ๊ฑด / ๋ถํ / ํต ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
๐ ๋ด๊ฐ ์์ฑํ ํ์ด
function solution(s){
let pCount = 0;
let yCount = 0;
for (let i = 0; i < s.length; i++) {
if (s[i] === 'p' || s[i] === 'P') {
pCount++;
}
if (s[i] === 'y' || s[i] === 'Y') {
yCount++;
}
}
if (pCount === yCount) {
return true;
} else if (pCount !== yCount) {
return false;
}
}
๐ ๋ด๊ฐ ์์ฑํ ํ์ด
function solution(phone_number) {
const arr = phone_number.split('');
let arr_length = arr.length - 1;
const hide = arr.map(num => num = '*');
for (let i = hide.length - 1; i >= hide.length - 4; i--) {
hide[i] = phone_number[arr_length];
arr_length--;
}
return hide.join('');
}
๐ ๋ค๋ฅธ ์ฌ๋์ ํ์ด
function solution(num) {
return '*'.repeat(num.length - 4) + num.slice(-4);
}
๐ ๋ด๊ฐ ์์ฑํ ํ์ด
// ์์
const string = 'cAdaCbfB';
console.log(string.split('').sort()); // ABCabcdf
๋ฆฌํดํด์ผ ํ ๊ฐ์ (์๋ฌธ์ ๋ด๋ฆผ์ฐจ์ + ๋๋ฌธ์ ๋ด๋ฆผ์ฐจ์) ์ด๋ค.
sort()์ ๋ฐ๋ผ ๊ธฐ๋ณธ์ ์ธ ์์๋ก ์ ๋ ฌ๋ ๋ฐฐ์ด์ slice()๋ฅผ ์ด์ฉํด ๋๋ฌธ์์ ์๋ฌธ์๋ก ๋๋์ด ๊ฐ๊ฐ์ ๋ฐฐ์ด์ reverse()๋ฅผ ์คํํด ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ๋ค. ๊ทธ ํ concat()์ ์ด์ฉํด ํฉ์น ๋ฐฐ์ด์ ์ต์ข ์ ์ผ๋ก ๋ฌธ์์ด๋ก ๋ณํํ๋ค.
function solution(s) {
const arr = s.split('').sort();
let lowercases;
let uppercases;
for (let i = 0; i < arr.length; i++) {
if (arr[i] !== arr[i].toUpperCase()) {
lowercases = arr.slice(i);
uppercases = arr.slice(0, i);
break;
}
}
const lowerReverse = lowercases.reverse();
const upperReverse = uppercases.reverse();
return lowerReverse.concat(upperReverse).join('');
}
๐ ๋ค๋ฅธ ์ฌ๋์ ํ์ด
function solution(s) {
return s
.split("")
.sort()
.reverse()
.join("");
}
๐ ๋ด๊ฐ ์์ฑํ ํ์ด
function solution(n) {
return (n + '').split('')
.map(item => parseInt(item))
.reduce((prev, curr) => prev + curr);
}
๐ ๋ค๋ฅธ ์ฌ๋์ ํ์ด
function solution(n) {
let sum = 0;
do {
sum += n % 10;
n = Math.floor(n / 10);
} while (n > 0);
return sum;
}
๐ ๋ด๊ฐ ์์ฑํ ํ์ด
function solution(numbers) {
const arr = [];
for (let i = 0; i < numbers.length - 1; i++) {
for (let j = i + 1; j < numbers.length; j++) {
const sum = numbers[i] + numbers[j];
if (arr[sum] === undefined) {
arr[sum] = sum;
}
}
}
return arr.flat();
}
๐ ์ฌ๊ท ํจ์๋, ์๊ธฐ ์์ ์ ํธ์ถํ๋ ํจ์๋ฅผ ๋งํ๋ค
p.173
for ๋ฃจํ ์ด์ฉ
function count(num) {
for (let i = num; i >= 0; i--) {
console.log(i);
}
}
count(10);
์ฌ๊ท ํจ์ ์ด์ฉ (๋ต ์๋)
function count(num) {
console.log(num);
count(num - 1);
}
count(10); // 10๋ถํฐ 1์ฉ ์์์ง ์ซ์๊ฐ ๋ฌดํ์ผ๋ก console ์ฐฝ์ ์ถ๋ ฅ๋๋ ๋ฌธ์ ๋ฐ์
์ฌ๊ท๊ฐ ์ผ์ด๋์ง ์๋(๋ฉ์๋๊ฐ ๋ฐ๋ณต๋์ง ์๋) ๊ฒฝ์ฐ๋ฅผ ๊ธฐ์ ์กฐ๊ฑด(์ค๋จ ์กฐ๊ฑด)
์ด๋ผ๊ณ ํ๋ค.
์ ์์ ์ ๊ฒฝ์ฐ, ์นด์ดํธ๋ฅผ 0์์ ๋๋ด๊ณ ์ฌ๊ท๊ฐ ์์ํ ์ง์๋๋ ๊ฒ์ ๋ง์์ผ ํ๋ค
๋ฐ๋ผ์, if ๋ฌธ์ ์ถ๊ฐํด num 0์ด ๋๋ฉด ํจ์๋ฅผ ๋๋ด๋๋ก ํ๋ค. ์ด๋ 0์ด ๊ธฐ์ ์กฐ๊ฑด์ ํด๋นํ๋ค.
function count(num) {
console.log(num);
if (num === 0) { // ์ถ๊ฐ!
return;
} else {
count(num - 1);
}
}
count(10);
[์์ ]
์ฃผ์ด์ง ์์ ๊ณ์น์ ๋ฐํํ๋ ํจ์๋ฅผ ๋ง๋ค์ด๋ผ.
cf. ๊ณ์น์ด๋? ๊ทธ ์๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๋ชจ๋ ์์ ์ ์์ ๊ณฑ์ ๋งํ๋ค.
p.176
Ruby๋ก ๊ตฌํ๋ ์ฝ๋ โ JavaScript๋ก ๋ณํ
function factorial(num) {
if (num === 1) { // ์ฌ๊ท๊ฐ ์ผ์ด๋์ง ์๋ ๊ฒฝ์ฐ์ด๋ค โ ๊ธฐ์ ์กฐ๊ฑด
return 1;
} else { // ์ฌ๊ท๊ฐ ์ผ์ด๋๋ ๊ฒฝ์ฐ์ด๋ค
return num * factorial(num - 1);
}
}
console.log(factorial(3)); // 6 (3*2*1)
๊ธฐ์ ์กฐ๊ฑด(์ฌ๊ท๊ฐ ์ผ์ด๋์ง ์๋ ๊ฒฝ์ฐ)
์ด ๋ฌด์์ธ์ง ์ฐพ๋๋ค.
num์ด 1์ผ ๊ฒฝ์ฐ๊ฐ ๊ธฐ์ ์กฐ๊ฑด์ด๋ค.
if (num === 1) {
return 1;
}
- ๊ธฐ์ ์กฐ๊ฑด์ ๋ค๋ฃฌ๋ค๋ ๊ฐ์ ํ์ ํจ์๋ฅผ ์ดํด๋ณธ๋ค.
factorical(1)์ ์ดํด๋ณธ๋ค. factorial(1)์ ํธ์ถํ๋ฉด 1์ ๋ฐํํ๋ค.
์ผ๋จ ์ด ์ฌ์ค์ ๊ธฐ์ตํด๋ผ.
- ๊ธฐ์ ์กฐ๊ฑด์ ๋ฐ๋ก '์ ' ์กฐ๊ฑด์ ๋ค๋ฃฌ๋ค๋ ๊ฐ์ ํ์ ํจ์๋ฅผ ์ดํด๋ณธ๋ค.
num์ 1์ด ๋๊ธฐ '์ '์ 2์์ ๊ฒ์ด๋ฏ๋ก factorial(2)๋ฅผ ์ดํด๋ณธ๋ค.
factorial(2)๋ฅผ ํธ์ถํ๋ฉด 2 * factorial(1)์ ๋ฐํํ๋ค.
2.์ ๋ฐ๋ฅด๋ฉด factorial(1)์ ๊ณง 1์ด๋ฏ๋ก ๊ฒฐ๊ตญ factorial(2)๋ 2๋ฅผ ๋ฐํํ๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ์ด ์ฌ์ค์ ๊ธฐ์ตํด๋ผ.
- ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ํ ๋ฒ์ ํ ์กฐ๊ฑด์ฉ ์ฌ๋ผ๊ฐ๋ฉด์ ๊ณ์ ๋ถ์ํ๋ค.
์ปดํจํฐ๋
ํธ์ถ ์คํ(Call Stack)
์ ์ฌ์ฉํ์ฌ ์ด๋ค ํจ์๋ฅผ ํธ์ถ ์ค์ธ์ง ๊ธฐ๋กํ๋ค.
factorial(3)์ด ํธ์ถ๋๋ค.
ํธ์ถ ์คํ์ factorial(3)์ pushํ๋ค.
factorial(3)์ ์คํ์ด ์๋ฃ๋๊ธฐ ์ ์,
factorial(3) ์คํ ์ค, factorial(2)๊ฐ ํธ์ถ๋๋ค.
ํธ์ถ ์คํ์ factorial(2)๋ฅผ pushํ๋ค.
factorial(2)์ ์คํ์ด ์๋ฃ๋๊ธฐ ์ ์,
factorial(2) ์คํ ์ค, factorial(1)์ด ํธ์ถ๋๋ค.
ํธ์ถ ์คํ์ factorial(1)์ pushํ๋ค.
1์ด ๊ธฐ์ ์กฐ๊ฑด์ด๋ฏ๋ก factorial(1)์ factorial() ๋ฉ์๋๋ฅผ ์คํํ์ง ์๊ณ 1์ ๋ฆฌํดํ๋ฉฐ ์คํ์ด ์๋ฃ๋๋ค.
ํธ์ถ ์คํ์์ factorial(1)์ popํ๋ค.
ํธ์ถ ์คํ์๋ ์์ง ์ฑ ์คํ์ด ์๋ฃ๋์ง ์์ factorial(2)์ factorial(3)์ด ๋ค์ด ์๋ค.
์ด ์ค์์ ํธ์ถ ์คํ์ ๊ฐ์ฅ ๋ง์ง๋ง์ push๋ ๊ฒ์ factorial(2)์ด๋ค.
๋ฐ๋ผ์, factorial(2)๊ฐ (factorial(1)์ ๊ฒฐ๊ณผ๋ฅผ ํ ๋๋ก) ์คํ์ด ์๋ฃ๋๋ค.
ํธ์ถ ์คํ์์ factorial(2)์ popํ๋ค.
์ด์ด์ factorial(3)๊ฐ (factorial(2)์ ๊ฒฐ๊ณผ๋ฅผ ํ ๋๋ก) ์คํ์ด ์๋ฃ๋๋ค.
ํธ์ถ ์คํ์์ factorial(3)์ popํ๋ค.
์ด์ ํธ์ถ ์คํ์ ๋น์ด ์์ผ๋ฏ๋ก ์ปดํจํฐ๋ ๋ฉ์๋๋ฅผ ๋ชจ๋ ์คํํ์์ ์๊ฒ ๋๊ณ , ์ฌ๊ท๋ ๋๋๊ฒ ๋๋ค.
[์์ ]
์ฃผ์ด์ง ๋๋ ํฐ๋ฆฌ์ ๋ชจ๋ ํ์ ๋๋ ํฐ๋ฆฌ๋ช ์ ์ถ๋ ฅํ๋ ํจ์๋ฅผ ๋ง๋ค์ด๋ผ.
pp.182 ~ 184
Ruby๋ก ๊ตฌํ๋ ์ฝ๋ โ JavaScript๋ก ๋ณํ
๐โโ๏ธ Q1. Ruby๋ฅผ ์ ํ ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ํ๊ธ๋ก ๋ ์ค๋ช ๋ง ๋ณด๊ณ ๊ตฌํํด์ผ ํ๋๋ฐ ํ๊ธ์ ์ฝ์ด๋ ์ฝ๋๋ก ๋ชป ๋ฐ๊พธ๊ฒ ๋ค. node.js๋ฅผ ์์์ผ ํ๋ ๊ฑด์ง ๊ทธ๋ฅ ๋ด๊ฐ ์ดํด๋ฅผ ๋ชปํ๋ ๊ฑด์ง.
๐
ํต ์ ๋ ฌ์ ๋์ ๋ฐฉ์
์ ๊ณต๋ถํจ์ผ๋ก์จ ์ด๋ป๊ฒ ์ฌ๊ท๋ฅผ ์ฌ์ฉํด ์๊ณ ๋ฆฌ์ฆ์ ์๋๋ฅผ ํฅ์์ํฌ ์ ์๋์ง ๋ฐฐ์ฐ๊ณ ์ ํ๋ค๐ ๋ง์ ์ปดํจํฐ ์ธ์ด์๋ ์ด๋ฏธ ํต ์ ๋ ฌ์ด ๋ด์ฅ๋์ด ์๋ค
๐ ํต ์ ๋ ฌ์ ์ต์ ์ ์๋๋ฆฌ์ค์์๋ ์ฝ์ ์ ๋ ฌ, ์ ํ ์ ๋ ฌ๊ณผ ์ฑ๋ฅ์ด ์ ์ฌํ์ง๋ง,
ํ๊ท ์๋๋ฆฌ์ค
์์๋ ํจ์ฌ ๋น ๋ฅด๋ค.๐ ํต ์ ๋ ฌ์
๋ถํ
์ด๋ผ๋ ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ค.
๋ฐฐ์ด์ ๋ถํ ํ๋ค
๋ ๊ฒ์,
๋ฐฐ์ด๋ก๋ถํฐ ์์์ ์(ํผ๋ฒ)
์ ๊ฐ์ ธ์
ํผ๋ฒ๋ณด๋ค ์์ ๋ชจ๋ ์๋ ํผ๋ฒ์ ์ผ์ชฝ์
ํผ๋ฒ๋ณด๋ค ํฐ ๋ชจ๋ ์๋ ํผ๋ฒ์ ์ค๋ฅธ์ชฝ์ ๋๋ ๊ฒ์ ๋งํ๋ค.
์ฒ์ ๋ถํ ์ด ์ฑ๊ณต์ ์ผ๋ก ๋๋๋ฉด, ๋ฐฐ์ด์ ์์ ํ ์ ๋ ฌ๋์ง ์๋๋ผ๋ ์ ์ด๋ ํผ๋ฒ๋ง์ ๋ฐฐ์ด ๋ด์์ ์ฌ๋ฐ๋ฅธ ์์น์ ์๊ฒ ๋๋ค.
๋ฐฐ์ด ๋ถํ ๋ฉ์๋๋ฅผ ํฌํจํ๋ class ๊ตฌํํ๊ธฐ
๋ฐฐ์ด ๋ถํ ๋ฉ์๋๋ '์ผ์ชฝ ํฌ์ธํฐ์ ์ค๋ฅธ์ชฝ ํฌ์ธํฐ์ ์์์ '์ ๋งค๊ฐ๋ณ์๋ก ์ ๋ฌ๋ฐ๋๋ค.
ํต ์ ๋ ฌ ๋ฉ์๋์์ ์ฌ์ฉํ๊ธฐ ์ํด, ๋ฐฐ์ด ๋ถํ ๋ฉ์๋๋, ์ต์ข ์ ์ผ๋ก '์ผ์ชฝ ํฌ์ธํฐ๊ฐ ์ด๋์ ๋ฉ์ท์ ๋์ ์์น(์ฆ, ํผ๋ฒ์ด ๋ค์ด๊ฐ ์ต์ข ์์น)'๋ฅผ ๋ฆฌํดํ๋๋ก ํ๋ค.
p.193
Ruby๋ก ๊ตฌํ๋ ์ฝ๋ โ JavaScript๋ก ๋ณํ
class SortableArray {
constructor(arr) {
this.arr = arr;
}
partition(left_pointer, right_pointer) {
// ํญ์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ ๊ฐ์ ํผ๋ฒ์ผ๋ก ์ค์ ํ๋ค (์ด ์์ ์ ์กฐ๊ฑด์ผ ๋ฟ, ์ค์ ๋ก ๋ค๋ฅธ ์์น๋ฅผ ๊ณ ๋ฅผ ์๋ ์๋ค)
const pivot = this.arr[right_pointer];
const pivot_position = right_pointer;
let left = left_pointer;
let right = right_pointer - 1;
while (true) {
while (this.arr[left] < pivot) {
left += 1;
}
while (left < right && this.arr[right] > pivot) {
right -= 1;
}
if (left >= right) {
// ์ผ์ชฝ ํฌ์ธํฐ์ ์ค๋ฅธ์ชฝ ํฌ์ธํฐ์ ์์น๊ฐ ๊ฐ๊ฑฐ๋
// ์ผ์ชฝ ํฌ์ธํฐ๊ฐ ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ณด๋ค ์ค๋ฅธ์ชฝ์ ์๊ฒ ๋๋ฉด
// ๋ฐ๊นฅ while ๋ฃจํ๋ฅผ ๋น ์ ธ๋๊ฐ ํ
break;
} else {
this.swap(left, right);
left += 1;
}
}
// ํ์ฌ ์ผ์ชฝ ํฌ์ธํฐ์ ํ์ฌ ํผ๋ฒ ์์น๋ฅผ ๊ตํํ๋ค
this.swap(left, pivot_position);
return left;
}
swap(pointer_1, pointer_2) {
const temp = this.arr[pointer_1];
this.arr[pointer_1] = this.arr[pointer_2];
this.arr[pointer_2] = temp;
}
}
const arr1 = [0, 5, 2, 1, 6, 3];
const arr = new SortableArray(arr1);
console.log(arr.partition(0, arr1.length - 1)); // 3
console.log(arr1); // [0, 1, 2, 3, 6, 5]
์์ ๋ฐฐ์ด์ ๋ถํ ํ๋ค. ์ด์ ํผ๋ฒ(3)์ ์ฌ๋ฐ๋ฅธ ์์น์ ์๋ค.
๋ค์์ผ๋ก ํผ๋ฒ(3)์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ์ ์๋ ํ์ ๋ฐฐ์ด์ ๊ฐ๊ฐ ๋ ๋ค๋ฅธ ๋ฐฐ์ด๋ก ๋ณด๊ณ , ์ด๋ฅผ ๋ค์ ๋ถํ ํ๋๋ก ํ๋ค. ์ด์ ๋ ๋ ๋ฒ์งธ ๋ถํ ์ ์ฌ์ฉ๋ ํผ๋ฒ ๋ํ ์ฌ๋ฐ๋ฅธ ์์น์ ์๊ฒ ๋๋ค.
๋์ผํ ๊ณผ์ ์ ์ฌ๊ท์ ์ผ๋ก ๋ฐ๋ณตํ๋, ๊ธฐ์ ์กฐ๊ฑด
์ ๋งจ ์ฒ์์ ์ ์ด์ค๋ค.
์ ์์ ์์ ํต ์ ๋ ฌ ๋ฉ์๋๋ฅผ ์ถ๊ฐํ๋ค
class SortableArray {
constructor(arr) {
this.arr = arr;
}
// ํต ์ ๋ ฌ ๋ฉ์๋ ์ถ๊ฐ โ
quickSort(left_index, right_index) {
// ๋ ์ด์ ์ฌ๊ท๊ฐ ์ผ์ด๋์ง ์๋ ์ฆ, ๋ถํ ๋ฉ์๋๊ฐ ๋ฐ๋ณต๋์ง ์๋
// ๊ธฐ์ ์กฐ๊ฑด : ํ์ ๋ฐฐ์ด์ ์์๊ฐ 0๊ฐ ๋๋ 1๊ฐ์ผ ๋
if (left_index >= right_index) {
return;
}
// ์ฒ์์ผ๋ก ๋ฐฐ์ด์ ๋ถํ ํ๊ณ , ํผ๋ฒ์ ์์น๋ฅผ ๊ฐ์ ธ์จ๋ค
const pivot_position = this.partition(left_index, right_index);
// ํผ๋ฒ ์ผ์ชฝ์ ๋ํด ๋ถํ ๋ฉ์๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ๋ค
this.quickSort(left_index, pivot_position - 1);
// ํผ๋ฒ ์ค๋ฅธ์ชฝ์ ๋ํด ๋ถํ ๋ฉ์๋๋ฅผ ์ฌ๊ท์ ์ผ๋ก ํธ์ถํ๋ค
this.quickSort(pivot_position + 1, right_index);
}
// ๋ถํ ๋ฉ์๋
partition(left_pointer, right_pointer) {
const pivot = this.arr[right_pointer];
const pivot_position = right_pointer;
let left = left_pointer;
let right = right_pointer - 1;
while (true) {
while (this.arr[left] < pivot) {
left += 1;
}
while (left < right && this.arr[right] > pivot) {
right -= 1;
}
if (left >= right) {
break;
} else {
this.swap(left, right);
left += 1;
}
}
this.swap(left, pivot_position);
return left;
}
// ๋ฐฐ์ด ์์ ๊ตํ ๋ฉ์๋
swap(pointer_1, pointer_2) {
const temp = this.arr[pointer_1];
this.arr[pointer_1] = this.arr[pointer_2];
this.arr[pointer_2] = temp;
}
}
const arr1 = [0, 5, 2, 1, 6, 3];
const arr = new SortableArray(arr1);
arr.quickSort(0, arr1.length - 1);
console.log(arr1); // [0, 1, 2, 3, 5, 6]
๐ ํต ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ ์๊ธฐ ์ํด์๋, ๋จผ์ ๋ถํ ์ ํจ์จ์ฑ
์ ๋ฐํ์ผ ํ๋ค
๋ถํ ์๋ ์ด ๋ ์ข
๋ฅ์ ๋จ๊ณ, ๋น๊ต & ๊ตํ
์ด ํฌํจ๋์ด ์๋ค.
๋น๊ต
๊ฐ ๋ถํ ๋ง๋ค, ๋ฐ์ดํฐ๊ฐ N๊ฐ์ผ ๋, '๋น๊ต'๋ N๋ฒ ์ผ์ด๋๋ค.
๋ฐฐ์ด ๋ด ๊ฐ ์์๋ฅผ ํผ๋ฒ๊ณผ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ด ๊ณผ์ ์์ ์ผ์ชฝ ํฌ์ธํฐ์ ์ค๋ฅธ์ชฝ ํฌ์ธํฐ๋ ์๋ก ๋ง๋ ๋๊น์ง ๊ฐ ์
์ ์ด๋ํ๋ค.
๊ตํ
๊ตํ ํ์๋ ๋ฐ์ดํฐ๊ฐ ์ผ๋ง๋ ์ ๋ ฌ๋์ด ์๋๋์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
ํ๊ท ์๋๋ฆฌ์ค์ผ ๋(๋ฐ์ดํฐ ๋ฌด์์ ์ ๋ ฌ)
๋ฐ์ดํฐ๊ฐ N๊ฐ๋ผ๋ฉด, '๊ตํ'์ ๋๋ต N / 4๋ฒ ์ผ์ด๋๋ค.
๋น๊ต + ๊ตํ
N๋ฒ์ ๋น๊ต์ N / 4๋ฒ์ ๊ตํ์ ๋ํ๋ฉด, ๋๋ต ์ด 1.25N ๋จ๊ณ๊ฐ ๊ฑธ๋ฆฐ๋ค.
๋น
์ค๋ ์์๋ฅผ ๋ฌด์ํ๋ฏ๋ก ๋ถํ ์ ํจ์จ์ฑ์ O(N)
์ด๋ผ๊ณ ํ ์ ์๋ค.
๐ ๊ทธ๋ฌ๋, ์ด๋ ํ ๋ฒ ๋ถํ ํ ๋์ ํจ์จ์ฑ์ด๋ค. ํต ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋ค์ํ ํฌ๊ธฐ์ ๋ฐฐ์ด๊ณผ ํ์ ๋ฐฐ์ด์ ์ฌ๋ฌ ๋ฒ '๋ถํ 'ํ๊ธฐ ๋๋ฌธ์ ํต ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ
์ ์๊ธฐ ์ํด์๋ ์ข ๋ ๋ถ์ํด์ผ ํ๋ค.
๊ฐ ๋ถํ ๋ง๋ค ๋ถํ ๋๋ ํ์ ๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ๋ค์ํ๋ค๋ ๊ฐ์ ํ์
๋ฐ์ดํฐ๊ฐ N๊ฐ์ผ ๋, ๋๋ต N * log N ๋จ๊ณ๊ฐ ๊ฑธ๋ฆฐ๋ค.
๋ฐ๋ผ์, ํต ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ์ O(N log N)
์ด๋ค.
์ด๋, ํ์ ๋ฐฐ์ด์ด 1๊ฐ์ ์์๋ฅผ ๊ฐ์ง ๋๊น์ง(๊ธฐ์ ์กฐ๊ฑด์ ๋ค๋ค๋ฅผ ๋๊น์ง), ๊ฐ ํ์ ๋ฐฐ์ด์ ๊ณ์ํด์ ๋ฐ์ผ๋ก ๋๋๊ธฐ ๋๋ฌธ์ด๋ค. ์ด์ง ๊ฒ์์ ์๋ฆฌ๋ฅผ ์๊ฐํ๋ฉด ์ดํดํ๊ธฐ ์ฝ๋ค.
(์ด๋, ๋ถํ ๊ณผ ๋ฐ์ผ๋ก ๋๋๋ ๊ฒ์ ํผ๋ํ๋ฉด ์๋๋ค. ๋ถํ ์ ์์ ์ฝ๋์์ partition() ์ฆ, ๋น๊ต & ๊ตํ์ ํด๋นํ๋ ๋ถ๋ถ์ ๋งํ๊ณ , ๋ฐ์ผ๋ก ๋๋๋ ๊ฒ์ ์์ ์ฝ๋์์ quickSort() ๋ฉ์๋์ ํฌํจ๋์ด ์๋ ๋ถ๋ถ์ ๋งํ๋ค.)
์ฆ, ๋ฐ์ดํฐ๊ฐ N๊ฐ์ผ ๋, ์๋ ๋ฐฐ์ด์ ๊ฐ์ ํฌ๊ธฐ์ ํ์ ๋ฐฐ์ด๋ก logN๋ฒ ๋๋ ์ ์๊ณ , ๋๋ ๋๋ง๋ค ์๋ ๋ฐฐ์ด์ N๊ฐ ์ ์ ๋ถ๋ฅผ ๋ถํ ํ๋ฏ๋ก, ๋๋ต ์ด N * log N ๋จ๊ณ๊ฐ ๊ฑธ๋ฆฐ๋ค.
ํ๋ก๊ทธ๋๋จธ์ค ๋ฌธ์ ํ์ด
์ฑ ๊ณ์ ์ฝ๊ธฐ