문제 설명
중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 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()을 살펴보면 이는 정수 값을 받아, 배열에서 해당 값에 해당하는 인덱스의 요소를 반환하는 메서드라고 한다. 훨씬 더 보기 좋은 코드라고 생각하고, 가독성도 높다고 생각된다. 이렇게 여러 코드를 작성해보면서 간결하면서도 가독성을 높일 수 있도록 노력해야겠다.