Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Archives
Today
Total
관리 메뉴

새싹 개발자의 우당타당 개발일기

제로부터 시작하는 코테) 최빈값 구하기 본문

코딩테스트

제로부터 시작하는 코테) 최빈값 구하기

크누 2024. 11. 28. 12:23

문제 설명

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


제한사항
  • 0 < array의 길이 < 100
  • 0 ≤ 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) {
    const freq = new Map();
    let maxFreq = 0;
    let mode = -1;

    // 빈도 계산 및 최대 빈도 찾기
    array.forEach(num => {
        const count = (freq.get(num) || 0) + 1;
        freq.set(num, count);
        maxFreq = Math.max(maxFreq, count);
    });

    // 최빈값이 여러 개인지 확인
    let countMaxFreq = 0;
    freq.forEach((value, key) => {
        if (value === maxFreq) {
            mode = key;
            countMaxFreq++;
        }
    });

    // 최빈값이 여러 개인 경우 -1 반환
    return countMaxFreq > 1 ? -1 : mode;
}

// 테스트 예제
console.log(solution([1, 2, 3, 3, 3, 4]));  // 결과: 3
console.log(solution([1, 1, 2, 2]));        // 결과: -1
console.log(solution([1]));                // 결과: 1

 

문제풀이 설명 

 

  • . 빈도 계산 및 최대 빈도 찾기
    • freq.get(num) || 0: 해당 키의 빈도를 가져오거나 0으로 초기화합니다.
    • freq.set(num, count): 새 빈도를 Map에 저장합니다.
    • Math.max(maxFreq, count): 현재 최대 빈도를 업데이트합니다.
    2. 최빈값이 여러 개인지 확인
    • freq.forEach: Map의 각 키와 값을 순회합니다.
    • countMaxFreq++: 최대 빈도를 가진 키의 개수를 셉니다.
    3. 최빈값 반환
    • countMaxFreq > 1: 최빈값이 여러 개이면 -1 반환.
    • mode: 최빈값을 반환.

 

다른사람 풀이

//#1
//Map과 내림차순 sort 이용해 문제 해결
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;
}




//#2
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];
}