프로그래머스

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

jjangsh 2024. 7. 16. 21:22

문제 :

 

 

내 풀이 :

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() 함수를 제대로 쓸 수 있을 것이다.