문제 개요
정렬된 숫자 배열을 입력받아 해당 데이터 세트의 평균(mean)과 최빈값(mode)을 계산한 뒤, 두 값이 서로 같으면 true, 그렇지 않으면 false를 반환하는 JavaScript 함수를 작성해 보겠습니다.
예시
입력 배열이 다음과 같다고 가정해 봅시다.
const arr = [5, 3, 3, 3, 1];
이 배열의 평균은 (5 + 3 + 3 + 3 + 1) ÷ 5 = 3이고, 가장 자주 등장하는 값인 최빈값 역시 3입니다. 따라서 이 배열에 대한 출력 결과는 true가 됩니다.
구현 코드
다음은 위 문제를 해결하는 전체 코드입니다.
const arr = [5, 3, 3, 3, 1];
// 평균 계산: 모든 요소의 합을 배열 길이로 나눔
const mean = arr => arr.reduce((a, b) => a + b) / arr.length;
// 최빈값 계산: 각 숫자의 등장 횟수를 세고 가장 많이 나온 값 반환
const mode = arr => {
let obj = {}, max = 1, mode;
for (let i of arr) {
obj[i] = obj[i] || 0;
obj[i]++;
}
for (let i in obj) {
if (obj.hasOwnProperty(i)) {
if (obj[i] > max) {
max = obj[i];
mode = i;
}
}
}
return +mode;
};
// 평균과 최빈값 비교
const meanMode = arr => mean(arr) === mode(arr);
console.log(meanMode(arr));출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
true
코드 동작 원리
1. 평균(mean) 계산
reduce() 메서드로 배열의 모든 요소를 더한 뒤, 배열의 길이로 나누어 산술 평균을 구합니다. 위 예시에서는 15 ÷ 5 = 3이 됩니다.
2. 최빈값(mode) 계산
객체(obj)를 사용해 각 숫자가 몇 번 등장했는지 빈도를 기록합니다. 이후 객체를 순회하며 등장 횟수가 가장 많은 숫자를 찾아 반환하며, 마지막에 단항 더하기 연산자(+)를 사용해 문자열 형태의 객체 키를 숫자로 변환합니다.
3. 두 값 비교
meanMode 함수는 엄격 일치 연산자(===)로 평균과 최빈값을 비교하여 결과를 불리언 값으로 반환합니다. 두 값이 모두 3으로 일치하므로 true가 출력됩니다.