본문 바로가기

Algorithm/Programmers

Programmers 120811 중앙값 구하기 Javascript

https://school.programmers.co.kr/learn/courses/30/lessons/120811

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr


홀수 개수의 무작위 숫자 배열을 입력으로 받아 그 중 중앙값을 추출하는 문제이다.

 

문제해결 논리는 다음과 같다.

 

1. 배열을 정렬한다.

2. 중간 인덱스 값에 위치한 요소를 찾는다.


 

배열을 정렬할 때 sort함수를 이용할 수 있는데 이 때 주의해야 할 것이 있다.

sort 함수는 문자열의 유니코드를 기본 정렬 순서로 가진다.

 

따라서 [11, 12, 0, 1, 2]와 같은 배열을 sort하면 [0, 1, 11, 12, 2] 순서가 된다.

 

숫자를 비교하기 위해서 sort에 비교함수를 매개변수로 사용해야 한다.

 

비교함수는 인자로 두 요소(a, b)를 받아 number를 리턴한다.

 

이 number가 음수면 a가 b 이전으로, 양수면 a가 b 다음으로 옮겨진다. (0이면 a와 b가 같다.)

 

따라서 위의 배열 [11, 12, 0, 1, 2]에 다음의 비교함수를 적용시키면

[11, 12, 0, 1, 2].sort((a,b) => (a-b))

 

sort 알고리즘에 의해 두 요소를 골라 비교한 뒤 작은 수가 앞에, 큰 수가 뒤에 오게 된다.


이제 array를 정렬했으니 중앙 인덱스(length가 홀수 이므로 array.length / 2의 floor 값)의 값이 중앙값이 된다.

function solution(array) {
    array.sort((a,b) => a-b);
        
    var answer = array[Math.floor(array.length / 2)];
    return answer;
}