본문 바로가기
개발/Javascript

[코딩테스트] 최빈값, 빈도수 구하기주사위

by 코딩하는 갓디노 2024. 9. 5.

빈도 계산

*프로그래머스 발췌*

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

문제 풀이1 - Map과 배열 

function solution(array) {
    let map = new Map();
    for (let one of array) map.set(one, map.get(one)? map.get(one)+1 : 1);
    map = [...map].sort((a, b) => b[1]-a[1]);
    return map.length === 1 || map[0][1] > map[1][1] ? map[0][0] : -1;
}

문제풀이2 - Map, for of 문

function solution(array) {
   let map = new Map()
    array.forEach(one => {
        map.set(one, map.get(one)? map.get(one)+1: 1)
    })
    
    let maxFrequency = 0;
    let mode = -1;
    let isUnique = true;  // 최빈값이 하나인지 확인하는 플래그
       
  for([key, value] of map) {
      if(value > maxFrequency) {
          maxFrequency = value;
          mode = key;
          isUnique = true
      } else if (value === maxFrequency) {
             isUnique = false
      }
  }
 return isUnique ? mode : -1;  
}

문제풀이3 - reduce

function solution(array) {
  const counts = array.reduce((a, c) => (a[c] ? { ...a, [c]: a[c] + 1 } : { ...a, [c]: 1 }), {});
  const max = Math.max(...Object.values(counts));
  const modes = Object.keys(counts).filter(key => counts[key] === max);
  return modes.length === 1 ? +modes[0] : -1;
}
반응형

댓글