Javascript - 최빈값 구하기

이율곡·2023년 7월 18일

Programmers

목록 보기
35/44
post-thumbnail

최빈값 구하기

문제

최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다. 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요. 최빈값이 여러 개면 -1을 return 합니다.

입출력 예

arrayresult
[1, 2, 3, 3, 3, 4]3
[1, 1, 2, 2]-1
[1]1

접근방법

이 문제의 핵심은 배열에서 각 숫자가 몇 번 등장하는지 카운트하고, 가장 높은 빈도를 가진 숫자를 찾아내는 것이다. 이런 핵심으로 접근하면,

  1. 배열을 순회하면서 각 숫자가 몇 번 등장하는지 세는 객체를 만듦.
  2. 이 객체를 사용해 가장 빈도가 높은 숫자를 찾기.
  3. 최빈값이 여러 개라면 -1을 반환하고, 그렇지 않으면 최빈값을 반환.

풀이

function solution(array) {
  let count = {};

  array.forEach((num) => {
    if (count[num]) {
      count[num] += 1;
    } else {
      count[num] = 1;
    }
  });

  let maxFreq = Math.max(...Object.values(count));
  let mode = Object.keys(count).filter((key) => count[key] === maxFreq);

  if (mode.length > 1) return -1;

  return Number(mode[0]);
}

코드 풀이는 접근 방법과 같다. 우선 주어진 배열을 순회하면서 각 숫자가 몇 번 등장하는지 세는 count 객체를 만든다.

그런 다음 이 객체에서 가장 빈도가 높은 숫자를 찾기 위해 Object.values를 사용해 모든 값을 얻고, Math.max를 사용해 그 중 최대 빈도수를 찾는다.

마지막으로 그리고 이 최대 빈도수와 같은 빈도수를 가진 숫자들을 찾기 위해 filter를 사용해 count 객체의 키를 필터링한다. 그리고 최빈값이 여러 개인 경우 -1을 반환하고, 그렇지 않은 경우 최빈값(mode[0])을 숫자 형태로 반환하면 된다.


정리하기

이 문제는 배열에서 가장 자주 등장하는 값을 찾는 알고리즘을 구현하는 능력을 테스트하는 문제다. 그렇기 때문에 배열을 탐색하고 카운트를 관리할 수 있는지, 그리고 그 카운트를 이용해 최빈값을 찾을 수 있는지 확인하려는 의도를 파악하는 게 중요했다.

profile
음악을 좋아하는 사람이 음악을 만들 듯, 개발을 좋아하게 될 사람이 쓰는 개발이야기

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

유익한 글 잘 봤습니다, 감사합니다.

답글 달기
comment-user-thumbnail
2023년 7월 18일

정말 좋은 정보 감사합니다!

답글 달기