[백준] 10989 - 수 정렬하기 3 (계수정렬)

Jang·2022년 9월 16일
0

백준

목록 보기
4/6
post-thumbnail

이 문제는 메모리 초과로 인해 JavaScript로는 풀 수 없는 문제라고 한다.
그래도 이전에 몰랐던 계수정렬에 대해 알게 되었다.

계수정렬 (Counting Sort)

  • 주어진 배열에서 제일 큰 수를 max라고 선언
  • new Array(max + 1); (주어진 숫자는 자연수인데 인덱스는 0부터 세므로)
  • array에 전부 0을 채워 넣음
  • input을 전부 탐색하면서 해당 값을 인덱스로 가지는 array 원소를 +1 해줌
    • ex) input[2] =5 인 경우 array[5]++
  • 이후 array를 처음부터 탐색하면서 값이 0이 아닌 경우 그 값만큼 여러번 출력
const fs = require("fs");
let input = fs.readFileSync("BAEKJOON/dev/stdin.txt").toString().trim().split("\n");
const N = input.shift();

const max = Math.max(...input);

const array = new Array(max + 1);
array.fill(0);

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

for (let i = 0; i < array.length; i++) {
  if (array[i]) {
    for (let j = 0; j < array[i]; j++) {
      console.log(i);
    }
  }
}

범위가 작을 때에 한해서 정렬 속도가 sort()에 비해 빠르다고 한다.

이전에 JSON에 값을 넣는 방식과 비슷한 것 같지만 해당 방식은 단순히 해당 숫자의 갯수만 체크가 가능할 뿐

계수 정렬을 이용하면 숫자의 크기에 따라 인덱스가 지정되므로 오름차순이 된다.

0개의 댓글