자바스크립트 배열의 최빈값 구하기

배열은 자바스크립트에서 가장 일반적으로 사용되는 데이터 구조 중 하나입니다. 배열에는 여러 가지 값이 포함될 수 있고, 때로는 배열에서 가장 자주 나타나는 값인 최빈값(mode)을 찾아야 할 때가 있습니다. 이번 기사에서는 자바스크립트를 사용하여 배열에서 최빈값을 찾는 방법을 알아보겠습니다.

방법 1: 객체 사용

가장 간단하고 효율적인 방법 중 하나는 객체를 사용하여 배열의 각 요소를 카운팅하는 것입니다. 우선, 빈 객체를 만들고 배열의 각 요소를 반복하면서 해당 요소를 객체의 속성으로 사용합니다. 해당 속성의 값을 1씩 증가시킵니다. 배열을 모두 반복한 후에는 객체에서 가장 큰 값을 가진 속성을 찾아 최빈값으로 결정합니다.

function findMode(arr) {
  const count = {};
  let maxCount = 0;
  let mode;

  for (let i = 0; i < arr.length; i++) {
    if (count[arr[i]] === undefined) {
      count[arr[i]] = 1;
    } else {
      count[arr[i]]++;
    }

    if (count[arr[i]] > maxCount) {
      maxCount = count[arr[i]];
      mode = arr[i];
    }
  }

  return mode;
}

const numbers = [1, 2, 3, 4, 4, 4, 5, 5, 6];
const mode = findMode(numbers);
console.log(`최빈값은 ${mode}입니다.`);

방법 2: 배열 및 Set 사용

ES6부터는 MapSet이라는 새로운 데이터 구조가 도입되었습니다. Map은 객체와 비슷한 형태로 데이터를 저장하고 접근할 수 있으며, Set은 중복 요소 없이 값을 저장합니다. 이러한 기능을 활용하여 배열의 각 요소를 Map 객체에 저장하고, 이미 존재하는 요소의 개수를 카운팅합니다. 마지막으로, 가장 많이 나타난 요소를 찾아 최빈값으로 결정합니다.

function findMode(arr) {
  const countMap = new Map();
  let maxCount = 0;
  let mode;

  arr.forEach((element) => {
    if (countMap.has(element)) {
      countMap.set(element, countMap.get(element) + 1);
    } else {
      countMap.set(element, 1);
    }
  });

  countMap.forEach((count, element) => {
    if (count > maxCount) {
      maxCount = count;
      mode = element;
    }
  });

  return mode;
}

const numbers = [1, 2, 3, 4, 4, 4, 5, 5, 6];
const mode = findMode(numbers);
console.log(`최빈값은 ${mode}입니다.`);

결론

이번 기사에서는 자바스크립트에서 배열의 최빈값을 구하는 방법을 알아보았습니다. 두 가지 방법을 소개했지만, 실제로는 다양한 방식으로 구현할 수 있습니다. 최빈값을 구하는 알고리즘은 데이터 분석 및 통계 분야에서 자주 활용되는 것으로, 이를 기반으로 다양한 기능을 구현할 수 있습니다.