숫자로 이루어진 배열을 인자로 받아, 그 배열의 가운데(중앙) 요소를 반환하는 JavaScript 함수를 작성해야 합니다.
문제 이해하기
예를 들어 다음과 같은 배열이 있다고 가정해 보겠습니다.
const arr = [1, 2, 3, 4, 5, 6, 7];
이 배열의 길이는 7(홀수)이므로, 함수의 출력 결과는 정확히 한 개의 중앙 요소인 4가 되어야 합니다.
구현 방법
핵심 아이디어는 배열 길이를 절반으로 나누어 중앙 위치를 계산하는 것입니다. 비트 시프트 연산자(>>)와 나머지 연산자(%)를 함께 사용하면, 배열 길이가 홀수인지 짝수인지에 따라 적절한 범위를 자동으로 잘라낼 수 있습니다.
const arr = [1, 2, 3, 4, 5, 6, 7];
const middle = function () {
const half = this.length >> 1; // 길이의 절반 (소수점 버림)
const offset = 1 - this.length % 2; // 홀수면 0, 짝수면 1
return this.slice(half - offset, half + 1);
};
Array.prototype.middle = middle;
console.log(arr.middle());
console.log([1, 2, 3, 4, 5, 6].middle());코드 동작 원리
this.length >> 1: 배열 길이를 2로 나눈 몫을 구합니다. 비트 연산 방식이라 성능 면에서도 유리합니다.1 - this.length % 2: 길이가 홀수일 때는 0, 짝수일 때는 1이 되어 슬라이스 시작 지점을 자동으로 보정합니다.slice(): 계산된 범위의 요소들로 구성된 새로운 배열을 반환합니다.
실행 결과
콘솔 출력 결과는 다음과 같습니다.
[ 4 ] [ 3, 4 ]
배열 길이가 홀수이면 중앙 요소 하나를, 짝수이면 가운데 두 요소를 배열 형태로 반환한다는 점을 확인할 수 있습니다. 이처럼 간단한 수학적 계산만으로 별도의 반복문 없이 효율적으로 중앙 요소를 추출할 수 있습니다.