[JavaScript] 중앙값 구하기 - 프로그래머스
문제 :
내 풀이 :
function solution(array) {
array.sort();
let halfCnt = parseInt(array.length / 2);
return array[halfCnt];
}
문제를 보고 먼저 배열 안 정수들을 정렬 시켜야겠다고 생각했다.
그래서 주어진 array 배열을 sort() 함수를 이용해서 오름차순으로 정렬 시켰다.
그 후 중앙값을 구하기 위해 중앙값이 몇 번째인지를 알아야 했다.
그래서 array의 길이를 2로 나누고 parseInt를 하여 중앙값이 몇 번째인지 halfCnt에 담았다.
마지막으로 array의 halfCnt번째(중앙값)를 리턴 시켰다.
나중에 알게 된 사실인데, sort() 함수는 정렬하기 전에 배열 내의 값을 내부적으로 문자열로 변환한다는 걸 알게 되었다.
만약 문제에서 array가 [1, 100, 20, 3] 으로 주어졌다면 내 풀이처럼 그냥 sort()만 하면 [1, 100, 20, 3] 으로 정렬이 되기 때문에 틀렸을 것이다.
그렇다면 sort() 함수를 제대로 알아야 한다.
sort() 함수는 인자로 정렬 기준을 나타내는 콜백 함수를 받는데, 이 대소비교를 위한 함수에는 2개의 인자가 넘어오며 다음과 같은 규칙을 따른다.
* 첫 번째 인자가 두 번째 인자보다 작으면 음수를 반환
* 첫 번째 인자가 두 번째 인자보다 크면 양수를 반환
* 첫 번째 인자가 두 번째 인자와 같으면 0을 반환
따라서 숫자 배열을 제대로 정렬하기 위해서는 첫 번째 인자에서 두 번째 인자를 빼줘야한다.
let numbers = [1,2,10,3,30,20]
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers) // [1, 2, 3, 10, 20, 30]
위의 예시를 보면 a가 1이고 b가 2면 -1을 반환하는데 음수이기 때문에 1이 2앞에 위치하게 된다.
이를 토대로 다시 코드를 적어보았다.
function solution(array) {
array.sort(function(a, b) {
return a - b;
});
let halfCnt = parseInt(array.length / 2);
return array[halfCnt];
}
이제서야 제대로 된 답을 구했다...
제대로 알고 쓰는 것과 대충 알고 쓰는 건 정말 다르다고 느꼈다.
다음부턴 sort() 함수를 제대로 쓸 수 있을 것이다.