Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 배열에서 가장 자주 등장하는 숫자와 반복 횟수 찾기

리터럴 값으로 이루어진 배열을 입력받아, 배열 안에서 가장 자주 등장하는 숫자가 무엇인지 그리고 그 숫자가 몇 번 반복되었는지 찾아내는 JavaScript 함수를 작성해야 합니다.

접근 방식

이 문제는 reduce() 메서드를 활용하면 깔끔하게 해결할 수 있습니다. 배열을 순회하면서 각 요소의 등장 횟수를 객체에 누적하고, 동시에 현재까지 가장 많이 등장한 값을 추적하는 방식입니다. 동점이 발생할 경우 여러 개의 최빈값을 배열로 반환하도록 처리했습니다.

예제 코드

실제 구현 코드는 다음과 같습니다.

const arr = ['13', '4', '1', '1', '4', '2', '3', '4', '4', '1', '2', '4', '9', '3'];
const findFrequency = (arr = []) => {
    const count = {};
    const max = arr.reduce((acc, val, ind) => {
        count[val] = (count[val] || 0) + 1;
        if (!ind || count[val] > count[acc[0]]) {
            return [val];
        };
        if (val !== acc[0] && count[val] === count[acc[0]]) {
            acc.push(val);
        };
        return acc;
    }, undefined);
    return {
        max, count
    };
}
console.log(findFrequency(arr));

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

{
    max: [ '4' ],
    count: { '1': 3, '2': 2, '3': 2, '4': 5, '9': 1, '13': 1 }
}

코드 설명

count 객체에는 각 숫자별 등장 횟수가 저장됩니다. 예제 배열에서는 '4'가 총 5번 등장하여 가장 빈도가 높은 숫자이므로 max 배열에 '4'만 포함되어 반환됩니다. 만약 두 개 이상의 숫자가 같은 최고 빈도를 기록한다면, max 배열에 해당 숫자들이 모두 담기게 됩니다. 이처럼 한 번의 순회로 빈도표와 최빈값을 동시에 얻을 수 있어 시간 복잡도 면에서도 효율적인 O(n) 방식입니다.