코딩 테스트

[프로그래머스 Level 0] 최빈값 구하기

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

 

문제 풀어보기: https://school.programmers.co.kr/learn/courses/30/lessons/120812

 

풀이보기
더보기
function solution(array) {
    let count = {};
    let maxValue = 0;
    let maxKeys = [];
    
    for(let num of array) {
        count[num] = (count[num] + 1) || 1;
    }
    
    for (let key in count) {
         if (count[key] > maxValue) {
             maxValue = count[key];
             maxKeys = [key];
         } else if (count[key] === maxValue) {
             maxKeys.push(key);
         }
    }

  return maxKeys.length > 1 ? -1 : Number(maxKeys[0]);

}

나는 객체를 이용해서 문제를 풀었다.

먼저 배열을 순회하며 각 요소와 요소에 대한 카운트 값을 count 객체에 넣어준다.

 

count 객체에 대해 만약 count[key] 값이 maxValue보다 크면 maxValue에 count[key] 값을 넣어준다.

그리고 maxKeys에 해당 키를 넣어준다.

하지만 count[key]와 maxValue가 똑같다면 maxKeys에 해당 키를 푸쉬해준다.

 

둘의 다른 점은 push할 때는 [1, 2] 이런식으로 마지막 요소 다음에 하나씩 추가되는 것이고,

maxKeys = [key]는 maxKeys에 [key]를 덮어씌우는 것이다.

그러므로 기존에 [1, 2]가 있었더라도 maxKeys=[3]을 해버리면 maxKeys는 [3]만 들어있게 된다.

 

따라서 maxKeys의 길이가 1 이상이면 같은 값이 여러 개인 것이므로 -1을 리턴해주고 아니라면 maxKeys[0]을 리턴한다.

반응형