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

Lenny·2023년 8월 23일
0

문제

풀이

function solution(array) {
    // 가장 많이 나온 숫자를 찾는 문제
    var answer = 0;
    let obj = {};
    let arr = [];
    
    array.forEach((item) => {
        obj[item] = array.filter((el) => {
            return el === item;
        }).length;
    })

    for(let i = 0; i < Object.keys(obj).length; i++) {
        arr.push(obj[Object.keys(obj)[i]]);
    }
    
    // 최빈값이 여러개인지 체크
    const multipleCheck = arr.filter((item) => {
        return item === Math.max(...arr);
    }).length;
    

    const mode = Number(Object.keys(obj).find(key => obj[key] === Math.max(...arr)));
    
    answer = multipleCheck > 1 ? -1 : mode
    
    return answer;
}

객체와 배열을 이용하여 문제를 풀었당

내 풀이에서 객체 obj는 array 배열의 숫자들을 { 해당원소 : 해당 원소의 개수 } 쌍으로 가지고있는 역할을 한다.

    array.forEach((item) => {
        obj[item] = array.filter((el) => {
            return el === item;
        }).length;
    })

이 코드에서 위에 적어놓은 역할을 하는 obj를 만든다!

그리고 arr 배열은 obj 배열이 가지고 있는 value들을 넣어놓은 배열이다.

이 문제는 어떤 숫자가 최빈값을 가지고 있는지 찾는 문제이다.

Math.max(...arr) 은 최빈값을 의미한다.

    const multipleCheck = arr.filter((item) => {
        return item === Math.max(...arr);
    }).length;

arr배열을 순회하면서 최빈값이 여러개인지 체크하고,

 const mode = Number(Object.keys(obj).find(key => obj[key] === Math.max(...arr)));

는 obj 객체에서 최빈값을 가지고 있는 숫자를 뽑아내는 코드이다.

 answer = multipleCheck > 1 ? -1 : mode

최빈값이 여러개면 -1을 리턴하고 아니면 최빈값을 가지는 숫자를 answer 변수에 할당해준다.

profile
🧑‍💻

0개의 댓글