숫자 배열을 입력받아 해당 배열의 중앙값(median)을 반환하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.
중앙값의 통계적 의미
중앙값은 오름차순 또는 내림차순으로 정렬된 숫자 목록에서 정확히 가운데에 위치한 값을 의미합니다. 극단적으로 크거나 작은 이상치(outlier)의 영향을 거의 받지 않기 때문에, 평균보다 데이터 집합의 실제 특성을 더 잘 설명해 주는 경우가 많습니다.
접근 방법
먼저 배열을 오름차순으로 정렬한 뒤, 배열의 길이에 따라 로직을 나누어 처리합니다.
- 배열 길이가 홀수인 경우: 정렬된 배열의 정중앙에 있는 요소 하나를 그대로 반환합니다.
- 배열 길이가 짝수인 경우: 가운데에 위치한 두 개의 요소를 찾아 그 평균값을 반환합니다.
예제 코드
const arr = [4, 6, 2, 45, 2, 78, 5, 89, 34, 6];
const findMedian = (arr = []) => {
const sorted = arr.slice().sort((a, b) => {
return a - b;
});
if(sorted.length % 2 === 0){
const first = sorted[sorted.length / 2 - 1];
const second = sorted[sorted.length / 2];
return (first + second) / 2;
}
else{
const mid = Math.floor(sorted.length / 2);
return sorted[mid];
};
};
console.log(findMedian(arr));
코드 설명
arr.slice()를 사용해 원본 배열을 복사한 뒤 정렬하므로 원본 배열은 변경되지 않습니다. 정렬 시에는 (a, b) => a - b 비교 함수를 전달해야 숫자 크기 기준으로 올바르게 정렬됩니다. 이후 배열 길이를 2로 나눈 나머지로 짝수 여부를 판별하고, 짝수라면 가운데 두 요소의 평균을, 홀수라면 Math.floor(length / 2) 인덱스의 요소를 반환합니다.
출력 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
6