Programmer - 최빈값 구하기

Jakesjk·2023년 2월 12일
0

Wecode - codekata

목록 보기
3/5

function solution(array) {
    let sortedArray = array.sort((a,b)=> a-b)
    var answer = 0;
    let cnt = 0; 
    let choi = -1; // 최빈값이 뭔지
    let choiRepeatCnt = 0; //최빈값이 될 때 몇번 반복해서 된건지
    let repeatCnt = 0; // 현재 똑같은 숫자가 몇번 등장했는지
    let beforeNumber = 0; // 지금 보고 있는 숫자 이전 숫자
    let isDupChoi = false;
    while(cnt < array.length) {
        if(beforeNumber !== array[cnt]) {
            repeatCnt = 1;
        } else {
            repeatCnt = repeatCnt + 1 ;
        }
        if(repeatCnt === choiRepeatCnt) {
            if(choi !== array[cnt]) {
                isDupchoi = true;    
            }
        }
        
        if(repeatCnt > choiRepeatCnt) {
            choi = array[cnt];
            choiRepeatCnt = repeatCnt;
            isDupchoi = false;
        } 
        beforeNumber = array[cnt]
        cnt = cnt + 1
    }
    if(isDupchoi) return -1
    return choi;
}



//1. 앞에서부터 차례대로 원소를 확인하여 갯수를 센다.
//2. 최빈값을 그때그때 기록한다.

// 다른사람풀이

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

// 다른사람풀이

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

// 다른사람풀이



profile
Dreams come true

0개의 댓글