본문 바로가기
Javascript/코딩테스트-연습

[JavaScript] 최빈값 구하기 - 프로그래머스

by BeomBe 2024. 3. 18.
반응형

문제 설명

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

 

출처 - 프로그래머스 https://school.programmers.co.kr/learn/courses/30/lessons/120812

 

자세한 내용은 아래 링크를 참고해주세요.

https://school.programmers.co.kr/learn/courses/30/lessons/120812

나의 풀이

Reduce를 사용해서 풀어봤습니다.

function solution(array) {
    const counter = array.reduce((acc, cur) => ({
        ...acc,
        [cur]: (acc[cur] || 0) + 1
    }), {})

    const items = Object.keys(counter).map((key) => [
        Number(key), counter[key]
    ]).sort((a, b) => b[1] - a[1])

    if (items[0][1] === items?.[1]?.[1]) {
        return -1
    }

    return items[0][0];
}

 

2024.02.02 - [Javascript/배경 & 실무 지식] - [JavaScript] Reduce() 란?

 

[JavaScript] Reduce() 란?

Reduce() 란? - 배열의 각 요소에 대해 주어진 reducer 함수를 실행하고, 하나의 결과값을 반환 const array1 = [1, 2, 3, 4]; // 0 + 1 + 2 + 3 + 4 const result = 0; const sum = array1.reduce( (accumulator, currentValue) => accumulator

beombe.tistory.com

 

다른 분의 풀이지만 Reduce를 사용하지 않고 기본적인 구조로 풀이를 한다면, 아래처럼 깔끔하게 생성됩니다.

function solution(array) {
    var answer = 0;
    var arr = [...new Set(array)];
    var count_arr = [];
    for(var i = 0; i < arr.length; i++) {
        var count = 0;
        for (var j = 0; j < array.length; j++) {
            if (arr[i] === array[j]) {
                count++;
            }
        }
    count_arr.push(count);
    }
var max = Math.max(...count_arr);
var j = count_arr.indexOf(max);

answer = arr[j];

for(var i = 0; i<arr.length; i++) {
    if (count_arr[i] === max && i != j) {
        answer = -1;
    }
}

    return answer;
}
반응형