문제 개요
숫자로 이루어진 배열을 입력받아, 배열 요소 전체의 평균을 계산한 뒤 그 값을 가장 가까운 정수로 반올림하여 반환하는 JavaScript 함수를 작성해야 합니다.
예를 들어 [45, 23, 67, 68, 12, 56, 99]라는 배열이 주어졌다면, 합계는 370이고 요소 개수는 7이므로 평균은 약 52.86입니다. 이를 반올림하면 최종 결과는 53이 됩니다.
구현 코드
다음은 reduce() 메서드와 Math.round()를 활용한 해결 코드입니다.
const arr = [45, 23, 67, 68, 12, 56, 99];
const roundedMean = (arr = []) => {
const { sum, count } = arr.reduce((acc, val) => {
let { sum, count } = acc;
count++;
sum += val;
return { sum, count };
}, {
sum: 0, count: 0
});
const mean = sum / (count || 1);
return Math.round(mean);
};
console.log(roundedMean(arr));코드 설명
reduce()메서드를 사용하면 배열을 한 번만 순회하면서 합계(sum)와 요소 개수(count)를 동시에 누적할 수 있어 효율적입니다.- 초기값으로
{ sum: 0, count: 0 }객체를 전달해 누산기(accumulator)를 시작합니다. sum / (count || 1)부분은 빈 배열이 들어왔을 때 0으로 나누는 오류(NaN발생)를 방지하는 안전장치입니다. 배열이 비어 있으면count가 0이 되는데, 이때 1로 대체되어 결과가 0으로 반환됩니다.- 마지막으로
Math.round()를 통해 계산된 평균값을 가장 가까운 정수로 반올림하여 반환합니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
53