Skip to content

Latest commit

ย 

History

History
251 lines (194 loc) ยท 10.6 KB

File metadata and controls

251 lines (194 loc) ยท 10.6 KB

์ •๋ ฌ(Sorting) ์•Œ๊ณ ๋ฆฌ์ฆ˜

์ด์ฝ”ํ…Œ ์ฑ…

์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ์š”

์ •๋ ฌ(Sorting): ๋ฐ์ดํ„ฐ๋ฅผ ํŠน์ •ํ•œ ๊ธฐ์ค€์— ๋”ฐ๋ผ์„œ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ
์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๋ฉด ์ด์ง„ ํƒ์ƒ‰(Binary Search)์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

๋ฒ„๋ธ” ์ •๋ ฌ (bubble sort)

  • ๋‘ ์ธ์ ‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๊ตํ•ด์„œ, ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๋’ค์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ณด๋‹ค ํฌ๋ฉด, ์ž๋ฆฌ๋ฅผ ๋ฐ”๊พธ๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜
//๋ฐ์ดํ„ฐ๊ธธ์ด - 1๋งŒํผ ๋ฐ˜๋ณต์„ ํ•จ
for index in range(๋ฐ์ดํ„ฐ๊ธธ์ด - 1): 
 //์กฐ๊ฑด์„ ๋ช‡๋ฒˆ์ฒ˜๋ฆฌํ•˜๋ƒ
  swapFlag = false;
	for index2 in range(๋ฐ์ดํ„ฐ๊ธธ์ด - index - 1):// "๋ฐ์ดํ„ฐ๊ธธ์ด - index -1"์€ ํ„ด์˜ํšŸ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚ ๋•Œ๋งˆ๋‹ค 1์”ฉ ์ค„์–ด๋“ค๊ฒŒ ์ฒดํฌํ•จ
			if ์•ž๋ฐ์ดํ„ฐ > ๋’ค๋ฐ์ดํ„ฐ:
				swap(์•ž๋ฐ์ดํ„ฐ, ๋’ค๋ฐ์ดํ„ฐ)
				swapFlag = true;

  if swap == false: 
		break;

return data

๋ฒ„๋ธ”์ •๋ ฌ ์‹œ๊ฐ„๋ณต์žก๋„

  • ๋ฐ˜๋ณต๋ฌธ์ด 2๊ฐœ๋‹ˆ๊นŒ O(n^2)
  • ์™„์ „ ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด(์ด๋ฏธ ์ •๋ ฌ๋œ์ƒํƒœ) O(n)

์„ ํƒ ์ •๋ ฌ(Selection Sort)

  1. "๊ฐ€์žฅ ์ž‘์€ ๊ฒƒ์„ ์„ ํƒ"
  • ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ๋งจ ์•ž์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๊ณ , ๊ทธ๋‹ค์Œ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ ํƒํ•ด ์•ž์—์„œ ๋‘๋ฒˆ์งธ ๋ฐ์ดํ„ฐ์™€ ๋ฐ”๊พธ๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ด์„œ ์ •๋ ฌํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ์„ ํƒ ์ •๋ ฌ์€ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์•ž์œผ๋กœ ๋ณด๋‚ด๋Š” ๊ณผ์ •์„ N - 1๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฉด ์ •๋ ฌ์ด ์™„๋ฃŒ๋˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„
    • O(N^2)
    • ์„ ํƒ ์ •๋ ฌ์€ ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์•„์ง€๋ฉด ์ •๋ ฌ ์†๋„๊ฐ€ ๊ธ‰๊ฒฉํžˆ ๋А๋ ค์ง„๋‹ค.
for stand (๋ฐ์ดํ„ฐ) {
	์ตœ์†Œ๊ฐ’์ธ๋ฑ์Šค = ๊ธฐ์ค€๊ฐ’์ธ๋ฑ์Šค
	for index (stand ๋‹ค์Œ๋ฐ์ดํ„ฐ) {
		if ( ๋ฐ์ดํ„ฐ[์ตœ์†Œ๊ฐ’์ธ๋ฑ์Šค] > ๋ฐ์ดํ„ฐ[ํ˜„์žฌ์ธ๋ฑ์Šค] ) {
			์ตœ์†Œ๊ฐ’์ธ๋ฑ์Šค = ํ˜„์žฌ์ธ๋ฑ์Šค
		}
	}
	swap(์ตœ์†Œ๊ฐ’์ธ๋ฑ์Šค, ๊ธฐ์ค€๊ฐ’์ธ๋ฑ์Šค)
}
var array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8];

for (var i = 0; i < array.length; i++) {
    var min_index = i;
    for (var j = i + 1; j < array.length; j++) {
        if (array[min_index] > array[j]) {
            min_index = j;
        }
    }
    [array[i], array[min_index]] = [array[min_index], array[i]];
}

console.log(array);

์‚ฝ์ž… ์ •๋ ฌ(Insertion Sort)

  1. "๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๋ฉฐ, ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜์— ์‚ฝ์ž…"
  2. ๋ฐ์ดํ„ฐ์˜ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋“ค์€ ์ด๋ฏธ ์ •๋ ฌ์ด ๋œ ์ƒํƒœ์ด๋ฏ€๋กœ ์ž๊ธฐ๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋‚ฌ๋‹ค๋ฉด ๋”์ด์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ดํŽด๋ณผ ํ•„์š”์—†์ด ๊ทธ์ž๋ฆฌ์— ์‚ฝ์ž…๋˜๋ฉด ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
  3. ์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ ๋งค์šฐ ๋น ๋ฅด๊ณ , ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด์ž‘์œ„์ด๋ฉด ๋งค์šฐ ๋А๋ฆผ (ํ€ต์ •๋ ฌ๊ณผ ๋ฐ˜๋Œ€)
  • ์‚ฝ์ž… ์ •๋ ฌ์€ ํ•„์š”ํ•  ๋•Œ๋งŒ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋ฏ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ์„ ๋•Œ ํšจ์œจ์ ์ด๋‹ค.
  • ์„ ํƒ ์ •๋ ฌ์€ ํ˜„์žฌ ๋ฐ์ดํ„ฐ์˜ ์ƒํƒœ์™€ ์ƒ๊ด€์—†์ด ๋ฌด์กฐ๊ฑด ๋ชจ๋“  ์›์†Œ๋ฅผ ๋น„๊ตํ•˜๊ณ  ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๋Š” ๋ฐ˜๋ฉด, ์‚ฝ์ž… ์ •๋ ฌ์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.
  • ์‚ฝ์ž… ์ •๋ ฌ์€ ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ์ ˆํ•œ ์œ„์น˜์— '์‚ฝ์ž…'ํ•œ๋‹ค๋Š” ์˜๋ฏธ์—์„œ ์‚ฝ์ž…์ •๋ ฌ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • ๋ฐ์ดํ„ฐ๊ฐ€ ์ ์ ˆํ•œ ์œ„์น˜์— ๋“ค์–ด๊ฐ€๊ธฐ ์ด์ „์—, ๊ทธ ์•ž๊นŒ์ง€์˜ ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
  • ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ ๋ฆฌ์ŠคํŠธ์—์„œ ์ ์ ˆํ•œ ์œ„์น˜๋ฅผ ์ฐพ์€ ๋’ค์—, ๊ทธ ์œ„์น˜์— ์‚ฝ์ž…๋œ๋‹ค
  • ์‹œ๊ฐ„ ๋ณต์žก๋„
    • O(N^2)
    • ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฑฐ์˜ ์ •๋ ฌ๋˜์–ด ์žˆ๋Š” ์ƒํƒœ๋ผ๋ฉด ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ๋™์ž‘ํ•œ๋‹ค. ๋ณดํ†ต์€ ์‚ฝ์ž…์ •๋ ฌ์ด ๋น„ํšจ์œจ์ ์ด๋‚˜,
      ์ •๋ ฌ์ด ๋˜์–ด์žˆ๋Š” ์ƒํ™ฉ์—์„œ๋Š” ํ€ต ์ •๋ ฌ ๋“ฑ ๋‹ค๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์‚ฝ์ž… ์ •๋ ฌ์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์ •๋‹ต ํ™•๋ฅ ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.
var array = [7, 5, 9, 0, 3, 1, 6, 2, 4, 8];

for (var i = 1; i < array.length; i++) {
    for (var j = i; j > 0; j--) {
        if (array[j] < array[j - 1]) {
            [array[j], array[j - 1]] = [array[j - 1], array[j]];
        } else {
            break;
        }
    }
}

console.log(array);

ํ€ต ์ •๋ ฌ

  1. ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜, '๋น ๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜'
  2. "๊ธฐ์ค€ ๋ฐ์ดํ„ฐ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๊ทธ ๊ธฐ์ค€๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ์™€ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ์ž"
  3. ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌด์ž‘์œ„์ด๋ฉด ํ€ต ์ •๋ ฌ์ด ๋งค์šฐ ๋น ๋ฅด๊ณ , ์ด๋ฏธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ •๋ ฌ๋œ ๊ฒฝ์šฐ๋Š” ๋งค์šฐ ๋А๋ฆผ(์‚ฝ์ž…์ •๋ ฌ๊ณผ ๋ฐ˜๋Œ€)
  • ํ€ต ์ •๋ ฌ์€ ๊ธฐ์ค€์„ ์„ค์ •ํ•œ ๋‹ค์Œ ํฐ ์ˆ˜์™€ ์ž‘์€ ์ˆ˜๋ฅผ ๊ตํ™˜ํ•œ ํ›„ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค.

  • ํ”ผ๋ฒ—(pivot)์ด ์‚ฌ์šฉ๋จ. ํฐ์ˆซ์ž์™€ ์ž‘์€์ˆซ์ž๋ฅผ ๊ตํ™˜ํ• ๋•Œ ๊ตํ™˜ํ•˜๋Š” ๊ธฐ์ค€์„ ํ”ผ๋ฒ—์ด๋ผ๊ณ ํ•จ

  • ํ˜ธ์–ด ๋ถ„ํ•  ๋ฐฉ์‹ (ํ”ผ๋ฒ—์„ ์„ค์ •ํ•˜๊ณ  ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ถ„ํ• ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ฐฉ์‹์œผ๋กœ ํ€ต์ •๋ ฌ์„ ๊ตฌ๋ถ„ํ•˜๋Š”๋ฐ, ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ๋ถ„ํ• ๋ฐฉ์‹์ธ ํ˜ธ์–ด๋ถ„ํ• ๋ฐฉ์‹ ๊ธฐ์ค€)

    • ๋ฆฌ์ŠคํŠธ์—์„œ ์ฒซ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ฅผ ํ”ผ๋ฒ—์œผ๋กœ ์ •ํ•œ๋‹ค.
    • ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๊ณ , ์˜ค๋ฅธ์ชฝ์—์„œ๋ถ€ํ„ฐ ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š”๋‹ค.
    • ๊ทธ๋‹ค์Œ ํฐ ๋ฐ์ดํ„ฐ์™€ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์œ„์น˜๋ฅผ ์„œ๋กœ ๊ตํ™˜ํ•ด์ค€๋‹ค.
    • ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด 'ํ”ผ๋ฒ—'์— ๋Œ€ํ•˜์—ฌ ์ •๋ ฌ์ด ์ˆ˜ํ–‰๋œ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„

    • O(NlogN)
  • ํ”ผ๋ฒ—์„ ์„ค์ •ํ•˜์—ฌ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ ํ›„์—, ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์™€ ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ์—์„œ ๊ฐ๊ฐ ๋‹ค์‹œ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ์žฌ๊ท€ํ•จ์ˆ˜ํ˜•ํƒœ๋กœ ์ฝ”๋“œ๊ตฌํ˜„

    • ์ข…๋ฃŒ ์กฐ๊ฑด? ํ˜„์žฌ ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ 1๊ฐœ์ธ ๊ฒฝ์šฐ๋‹ค. ๋ฆฌ์ŠคํŠธ์˜ ์›์†Œ๊ฐ€ 1๊ฐœ๋ผ๋ฉด ์ด๋ฏธ ์ •๋ ฌ์ด ๋˜์–ด ์žˆ๋‹ค๊ณ  ๊ฐ„์ฃผํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋ถ„ํ• ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.
let array = [5,7,9,0,3,1,6,2,4,8];

function quickSort(array, start, end) {
    if (start >= end) {
        return;
    }

    let pivot = start;//0
    let left = start + 1; //1
    let right = end; //9

    while (left <= right) {// 1 <= 9  // 2 , 8 // 2, 7
        while (left <= end && array[left] <= array[pivot]) {
          // array[1] <= array[0]
            left++;
        }
        while (right > start && array[right] >= array[pivot]) {// 6, 5
          // 9 > 0 && array[9] >= array[0]
            right--;
        }
        if (left > right) {// 1 > 8
            [array[right], array[pivot]] = [array[pivot], array[right]];
        } else {
            [array[left], array[right]] = [array[right], array[left]];
        }
    }

    quickSort(array, start, right - 1);
    quickSort(array, right + 1, end);
}

quickSort(array, 0, array.length - 1);
console.log(array);

๊ณ„์ˆ˜ ์ •๋ ฌ(Count Sort)

ํŠน์ •ํ•œ ์กฐ๊ฑด์ด ๋ถ€ํ•ฉํ•  ๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋งค์šฐ ๋น ๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

  1. ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ ๋ฒ”์œ„๊ฐ€ ์ œํ•œ๋˜์–ด ์ •์ˆ˜ํ˜•ํƒœ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ์„๋•Œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค
  2. ๊ฐ€์žฅ ํฐ ๋ฐ์ดํ„ฐ์™€ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์ฐจ์ด๊ฐ€ 1,000,000์„ ๋„˜์ง€ ์•Š์„ ๋•Œ ํšจ๊ณผ์ 
  3. ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ํ•œ์ •๋˜์–ด ์žˆ๊ณ  ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ๋งŽ์ด ์ค‘๋ณต๋˜์–ด ์žˆ์„์ˆ˜๋ก ์œ ๋ฆฌํ•˜๋ฉฐ ํ•ญ์ƒ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†๋‹ค.
  4. ์ผ๋ฐ˜์ ์ธ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์˜ ์‹œ์Šคํ…œ ํ™˜๊ฒฝ์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ƒ์˜ ์ œ์•ฝ๊ณผ ์ž…์ถœ๋ ฅ ์‹œ๊ฐ„๋ฌธ์ œ๋กœ ์ธํ•˜์—ฌ
    ์ž…๋ ฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๋ฅผ 1,000๋งŒ๊ฐœ ์ด์ƒ์œผ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ •๋ ฌ ๋ฌธ์ œ์—์„œ์˜ ๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๋Š” 1,000๋งŒ๊ฐœ ๋ฏธ๋งŒ์œผ๋กœ ์ถœ์ œ๋  ๊ฒƒ์ด๋‹ค.
  • ๋จผ์ € ๊ฐ€์žฅ ํฐ ๋ฐ์ดํ„ฐ์™€ ๊ฐ€์žฅ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๊ฐ€ ๋ชจ๋‘ ๋‹ด๊ธธ ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ (๊ฐ€์žฅํฐ๋ฐ์ดํ„ฐ+1)
    ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๋ฉฐ ๋ฐ์ดํ„ฐ์˜ ๊ฐ’๊ณผ ๋™์ผํ•œ ์ธ๋ฑ์Šค์˜ ๋ฐ์ดํ„ฐ๋ฅผ 1์”ฉ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ๊ณ„์ˆ˜์ •๋ ฌ์ด ์™„๋ฃŒ๋œ๋‹ค.
    ์ •๋ ฌ๋œ ๊ฒฐ๊ณผ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ๋ฒˆ์งธ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ํ•˜๋‚˜์”ฉ ๊ทธ๊ฐ’๋งŒํผ ์ธ๋ฑ์Šค๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค. (0์ด 2๊ฐœ๋ฉด 0์„ 2๋ฒˆ ์ถœ๋ ฅ 00)

  • ์‹œ๊ฐ„ ๋ณต์žก๋„

    • O(N+K) : ๋ฐ์ดํ„ฐ๊ฐœ์ˆ˜๋ฅผ N, ์ตœ๋Œ€๊ฐ’์˜ํฌ๊ธฐ๋ฅผ K
  • ๊ณต๊ฐ„ ๋ณต์žก๋„

    • O(N+K)
      • ๊ณ„์ˆ˜ ์ •๋ ฌ์€ ๋•Œ์— ๋”ฐ๋ผ์„œ ์‹ฌ๊ฐํ•œ ๋น„ํšจ์œจ์„ฑ์„ ์ดˆ๋ž˜ํ•œ๋‹ค.
      • ๋™์ผํ•œ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ผ ๋•Œ ์ ํ•ฉํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ฉฐ, ๋ฐ์ดํ„ฐ ํŠน์„ฑ์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฉด ํ€ต์ •๋ ฌ์„ ์‚ฌ์šฉํ•˜์ž
      • e.g. ์„ฑ์  (100์ ์ด ์—ฌ๋Ÿฌ๋ช…์ด๋ผ๋ฉด)
  • ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ๊ธฐ์ˆ˜ ์ •๋ ฌ(Radix Sort)๊ณผ ๋”๋ถˆ์–ด ๊ฐ€์žฅ ๋น ๋ฅด๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

  • ๊ธฐ์ˆ˜ ์ •๋ ฌ์€ ๊ณ„์ˆ˜ ์ •๋ ฌ์— ๋น„ํ•ด ๋™์ž‘์€ ๋А๋ฆฌ์ง€๋งŒ, ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ˆ˜์˜ ํฌ๊ธฐ๋Š” ๋” ํฌ๋‹ค.

let array = [7,5,9,0,3,1,6,2,9,1,4,8,0,5,2];
let count = Array(Math.max(...array) + 1).fill(0);

for (let i = 0; i < array.length; i++) {
   count[array[i]]++;
}

let result = [];
for (let i = 0; i < count.length; i++) {
    // i๊ฐ€ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” count[i]๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด๋‹น ์ˆซ์ž๋งŒํผ ๋ฐ˜๋ณต
   for (let j = 0; j < count[i]; j++) {
      result.push(i);// ๊ฒฐ๊ณผ ๋ฐฐ์—ด์€ ์ž…๋ ฅ ๋ฐฐ์—ด์˜ ์›์†Œ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๊ฒŒ๋จ
   }
}

console.log(result.join(' '));

๋ณ‘ํ•ฉ ์ •๋ ฌ

๋ณ‘ํ•ฉ ์ •๋ ฌ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ€ต ์ •๋ ฌ๋ณด๋‹ค ๋А๋ฆฌ์ง€๋งŒ ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋„ ์‹œ๊ฐ„๋ณต์žก๋„ O(NlogN)์„ ๋ณด์žฅํ•œ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ์ œ๊ณตํ•˜๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋ณธ ์ •๋ ฌ ํ•จ์ˆ˜๋Š” ๋ณ‘ํ•ฉ ์ •๋ ฌ ํ˜น์€ ํ€ต ์ •๋ ฌ์— ๊ธฐ๋ฐ˜ํ•œ๋‹ค. ํ€ต ์ •๋ ฌ์— ๊ธฐ๋ฐ˜ํ•˜๋Š” ๊ฒฝ์šฐ์—๋„ O(NlogN)์„ ๋ณด์žฅํ•˜๋„๋ก ๊ตฌํ˜„๋˜์–ด ์žˆ๋‹ค.


์ฝ”๋”ฉํ…Œ์ŠคํŠธ์—์„œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ๋ฌธ์ œ์œ ํ˜• 3๊ฐ€์ง€

  1. ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ํ’€ ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ
    1. ๋‹จ์ˆœํžˆ ์ •๋ ฌ ๊ธฐ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋Š”์ง€ ๋ฌผ์–ด๋ณด๋Š” ๋ฌธ์ œ๋กœ ๊ธฐ๋ณธ ์ •๋ ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ์ˆ™์ง€ํ•˜๊ณ  ์žˆ์œผ๋ฉด ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ’€ ์ˆ˜ ์žˆ๋‹ค.
  2. ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์›๋ฆฌ์— ๋Œ€ํ•ด์„œ ๋ฌผ์–ด๋ณด๋Š” ๋ฌธ์ œ
    1. ์„ ํƒ ์ •๋ ฌ, ์‚ฝ์ž… ์ •๋ ฌ, ํ€ต ์ •๋ ฌ ๋“ฑ์˜ ์›๋ฆฌ๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋‹ค.
  3. ๋” ๋น ๋ฅธ ์ •๋ ฌ์ด ํ•„์š”ํ•œ ๋ฌธ์ œ
    1. ํ€ต ์ •๋ ฌ ๊ธฐ๋ฐ˜์˜ ์ •๋ ฌ ๊ธฐ๋ฒ•์œผ๋กœ๋Š” ํ’€ ์ˆ˜ ์—†์œผ๋ฉฐ ๊ณ„์ˆ˜ ์ •๋ ฌ ๋“ฑ์˜ ๋‹ค๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜๊ฑฐ๋‚˜ ๋ฌธ์ œ์—์„œ ๊ธฐ์กด์— ์•Œ๋ ค์ง„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ตฌ์กฐ์ ์ธ ๊ฐœ์„ ์„ ๊ฑฐ์ณ์•ผ ํ’€ ์ˆ˜ ์žˆ๋‹ค.

์ด์ฝ”ํ…Œ ์ฑ… ๋ฌธ์ œ

[์‹ค์ „๋ฌธ์ œ] ์œ„์—์„œ ์•„๋ž˜๋กœ

function descSort(n, ...rest) {
  return rest.sort((a, b) => b - a).join(' ');
}

[์‹ค์ „๋ฌธ์ œ] ์„ฑ์ ์ด ๋‚ฎ์€ ์ˆœ์„œ๋กœ ํ•™์ƒ ์ถœ๋ ฅํ•˜๊ธฐ

function printLowScore(n, ...rest) {
    const studentScore = rest.map(item => ({
        name: item.split(' ')[0],
        score: item.split(' ')[1]
    }));

    return studentScore.sort((a,b) => {return a.score-b.score}).map(item => item.name).join(' ');
}

printLowScore(2, 'ํ™๊ธธ๋™ 95', '์ด์ˆœ์‹  77')

[์‹ค์ „๋ฌธ์ œ] ๋‘ ๋ฐฐ์—ด์˜ ์›์†Œ ๊ต์ฒด