티스토리 뷰

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

function solution(array) {
    var answer = 0;
    const countMap = new Map();
    
    array.forEach((e) => {
        if(countMap.has(e)){
            countMap.set(e, countMap.get(e)+1);
        }else{
            countMap.set(e, 1);
        }
    })
    
    const [first, second] = Array.from(countMap).sort((a, b) => b[1] - a[1]);
    
    if(first[1] === second?.[1]) {
        answer = -1;
    } else {
        answer = first[0];
    }
    
    return answer;
}

js sort 성능이 좋은지 아닌지 확인

 

function solution(array) {
    const countMap = array.reduce((map, curr) => {
        if(map.has(curr)) {
            map.set(curr, map.get(curr) + 1);
        } else {
            map.set(curr, 1);
        }
        return map;
    }, new Map());
    
    const [first, second] = Array.from(countMap).sort((a, b) => b[1] - a[1]);
    
    return first[1] === second?.[1]
        ? -1
        : first[0]
}

 

 

굳이 map을 쓸 필요가 없어서

object를 썼음

function solution(array) {
    const countMap = array.reduce((obj, curr) => {
        if(obj[curr]) {
            obj[curr] = obj[curr] + 1;
        } else {
            obj[curr] = 1;
        }
        return obj;
    }, {});
    
    const [first, second] = Object.entries(countMap).sort((a, b) => b[1] - a[1]);
    
    return +(first[1] === second?.[1]
        ? -1
        : first[0])
}

근데 object라 키가 문자열로 나오길래 +를 써줌

 

 

단항 더하기 (+) - JavaScript | MDN

단항 더하기 연산자(+)는 피연산자 앞에 위치하며 피연산자를 평가하지만, 만약 피연산자가 숫자가 아니라면 숫자로 변환을 시도합니다.

developer.mozilla.org

 

댓글