최빈값 구하기(Javascript)

·2022년 10월 14일
1
post-thumbnail

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

제한사항

0 < array의 길이 < 100
-1000 < array의 원소 < 1000

입출력 예

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

입출력 예 설명

입출력 예 #1

[1, 2, 3, 3, 3, 4]에서 1은 1개 2는 1개 3은 3개 4는 1개로 최빈값은 3입니다.
입출력 예 #2

[1, 1, 2, 2]에서 1은 2개 2는 2개로 최빈값이 1, 2입니다. 최빈값이 여러 개이므로 -1을 return 합니다.
입출력 예 #3

[1]에는 1만 있으므로 최빈값은 1입니다.

나의 풀이

function solution(array) {
    let arr = new Map();
    for(let i = 0; i < array.length; i++){
        arr.set(array[i], (arr.get(array[i])||0) + 1);
    }
    let max = Math.max(...[...arr].map(v => v[1]))
    let count = [...arr].filter(v => v[1] === max).length
    return count > 1 ? -1 : [...arr].find(v => v[1] === max)[0]
}

map()을 이용해서 각 값마다 갯수를 세긴 했는데, 마지막 출력 값을 너무 복잡하게 한 것 같다. 값중에서 제일 큰 값을 max에, 최대값의 갯수를 count에다 넣은 다음 갯수가 1보다 많다면 -1을, 아니라면 max값과 일치하는 인덱스를 출력해 주었다.

참고할 풀이

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;
}

이 풀이에서는 똑같이 map()에 넣은 다음 값의 순서대로 내림차순으로 정렬해 주었다. 그리고 만약 배열이 한 값으로만 이루어져있거나 첫번째 인덱스의 값이 두번째 인덱스보다 크다면(다르다면) 제일 맨 앞의 값을 인출, 아니라면 -1을 인출해 주었다. 최빈값을 인출하는 방법이 더욱 간결해 보인다.

profile
전 이것도 몰라요

0개의 댓글