문제 설명
중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열array
가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.
1. 배열의 중앙(중앙에 있는 index)값 찾기
Math.floor()
혹은 Math.trunc()
메서드를 사용하여 정수 부분만 취한다. 2. 배열을 오름차순으로 정렬하기
sort()
메서드를 사용한다.3. 새 배열에 중앙값을 넣어 답 반환하기
따라서 아래와 같이 코드를 작성하였다.
function solution(array) {
// 배열 길이 중 중앙값 (중간 index) 찾기
const mid_num = Math.floor(array.length / 2);
// 오름차순으로 정렬하기 - sort() 메서드 사용
const asc_array = array.sort((a, b) => a - b);
// 오름차순된 새로운 배열 중 중간 index 반환하기
return asc_array[mid_num];
}
며칠 전 영상을 보며 Array APIs를 정리했었는데 덕분에 문제가 쉽게 풀렸다.
// 다른 사람의 풀이 1
function solution(array) {
return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];
}
// 다른 사람의 풀이 2
const solution = (array) =>
array
.sort((a, b) => a - b)
.at(Math.floor(array.length / 2))
다른 풀이 1은 내 방법과 유사하지만 훨신 간결하게 작성되었다. 나는 중앙값을 따로 구하기 위해 변수를 선언했고, 또한 새로운 배열을 만들어내었다. 그로 인해 코드가 훨씬 길어지게 되었고, 이는 가독성을 떨어트릴 위험이 있다. 위 코드처럼 간결하게 작성하도록 노력해야겠다.
다른 풀이 2는 at()
메서드를 사용하였다. MDN Array.prototype.at()을 살펴보면 이는 정수 값을 받아, 배열에서 해당 값에 해당하는 인덱스의 요소를 반환하는 메서드라고 한다. 훨씬 더 보기 좋은 코드라고 생각하고, 가독성도 높다고 생각된다. 이렇게 여러 코드를 작성해보면서 간결하면서도 가독성을 높일 수 있도록 노력해야겠다.