[JavaScript] 프로그래머스 중앙값 구하기

Gaeun·2022년 10월 20일
1

문제 설명
중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열 array가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.

내 풀이

1. 배열의 중앙(중앙에 있는 index)값 찾기

  • 배열의 길이가 3인 경우
    • 해당 배열의 index는 0, 1, 2를 갖고 있으므로 우리가 원하는 index 값은 1이다.
    • 3을 2로 나눴을 때 1.5이므로 정수 부분인 1을 얻어야 한다.
  • 배열의 길이가 5인 경우
    • 해당 배열의 index는 0, 1, 2, 3, 4를 갖고 있으므로 우리가 원하는 index 값은 2이다.
    • 5를 2로 나눴을 때 2.5이므로 정수 부분인 2를 얻어야 한다.
  • 배열의 길이가 (2n+1)인 경우
    • 해당 배열의 길이는 0, 1, 2, ... 2n-2, 2n-1, 2n이므로 우리가 원하는 index의 값은 n이다.
    • 2n+1을 2로 나눴을 때 n.xx이므로 정수 부분인 n을 얻어야한다.
  • 따라서 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()을 살펴보면 이는 정수 값을 받아, 배열에서 해당 값에 해당하는 인덱스의 요소를 반환하는 메서드라고 한다. 훨씬 더 보기 좋은 코드라고 생각하고, 가독성도 높다고 생각된다. 이렇게 여러 코드를 작성해보면서 간결하면서도 가독성을 높일 수 있도록 노력해야겠다.

profile
🌱 새싹 개발자의 고군분투 코딩 일기

0개의 댓글