최빈값 구하기

원지렁·2023년 4월 20일
0

알고리즘 정복기

목록 보기
12/12
post-thumbnail

최빈값 구하기

문제

배열 내 최빈값을 리턴해야 함. 단, 최빈값이 여러개면 -1을 리턴해야 함

  • 나의 풀이
function solution(array) {
  
    if (array.length === 1) {
      return array[0];
    }
  
  	// map 형식으로 key와 빈도수를 저장
    let obj = {};
  	// value 배열
    let values = [];

    for (let el of array) {
        if (obj[el]) {
            obj[el]++;
        } else {
            obj[el] = 1;
        }
    }
	// key 배열
    const keys = Object.keys(obj).map(el => parseInt(el));

    for (let i = 0; i < keys.length; i++) {
        if (obj.hasOwnProperty(keys[i])) {
            values.push(obj[keys[i]]);
        }
    }

  	// 최빈값 
    const max = Math.max(...values);

    let mode = [];
    for (let key in obj) {
        if (obj.hasOwnProperty(key) && obj[key] === max) {
            mode.push(parseInt(key));
        }
    }

    if (mode.length > 1) {
        return -1;
    } else {
        return mode[0];
    }
}
  • 다른 풀이
    : 3항 연산자를 이용한 깔끔한 풀이가 인상깊다... 계속 공부하자
function solution(array) {
    let m = new Map();
    for (let n of array) m.set(n, (m.get(n) || 0)+1);
    m = [...m].sort((a,b)=>b[1]-a[1]);
    return m.length === 1 || m[0][1] > m[1][1] ? m[0][0] : -1;
}
profile
새싹 개발자 지렁이의 벨로그입니다.

0개의 댓글