중앙값은 어떤 주어진 값들을 크기의 순서대로 정렬했을 때 가장 중앙에 위치하는 값을 의미합니다. 예를 들어 1, 2, 7, 10, 11의 중앙값은 7입니다. 정수 배열
array
가 매개변수로 주어질 때, 중앙값을 return 하도록 solution 함수를 완성해보세요.
✔ 제한사항
array
의 길이는 홀수입니다.array
의 길이 < 100array
의 원소 < 1,000function solution(array) {
// 오름차순으로 정렬
array.sort(function(a,b){
return a - b;
});
// 중앙값 계산
var half = Math.floor(array.length / 2);
return array[half];
}
우선 정수 배열인 array
를 .sort()
메서드를 이용해 오름차순으로 정렬합니다.
오름차순으로 정렬된 배열 array
를 반환해 중앙값을 계산해주면 끝! 😎
JavaScript에서 배열의 요소들을 정렬하기 위해 sort()
메서드를 사용합니다. sort()
메서드를 사용하면 배열의 요소를 오름차순
또는 내림차순
으로 정렬할 수 있습니다.
❗기존 배열의 요소들을 정렬합니다❗
var numbers = [2,5,1,7,6]
numbers.sort();
console.log(numbers) // [1,2,5,6,7]
오름차순으로 정렬
var numbers = ['a','d','h','e','b']
numbers.sort();
console.log(numbers) // ['a,'b','d','e','h']
알파벳순으로도 정렬 잘됩니다!
var numbers = [1,2,10,3,30,20]
numbers.sort();
console.log(numbers) // [1,10,2,20,3,30]
오잉😯 숫자가 뒤죽박죽이다?
➡ 정렬할 때 요소를 문자열로 취급하기 때문에!
그래서 1로 시작하는 10이 2 앞으로 오게 되버린것..!
제대로 정렬을 하고 싶다면, 값을 비교해줄 수 있는 함수를 넣어줘야 합니다.
✔ sort()
메서드의 비교함수는 두 개의 인수를 전달받으며 정렬 순서를 결정하는 값을 반환합니다.
반환값이
양수
면 b가 a보다 앞에 위치한다.
반환값이0
이면 a와 b의 순서는 바뀌지 않는다.
반환값이음수
면 a가 b보다 앞에 위치한다.
var 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을 반환합니다. 이때 sort 메서드는 반환값이 음수인 것을 확인하고 1을 2 앞에 위치시킵니다.
이런식으로 두 개의 인수를 전달받아 오름차순으로 정렬시키는 것입니다!
numbers.sort((a,b) => a - b);
이렇게 화살표 함수를 사용해서 좀 더 간단하게도 표현할 수 있습니다.
var numbers = [1,2,10,3,30,20]
numbers.sort(function(a, b){
return b - a;
});
console.log(numbers) // [30, 20, 10, 3, 2, 1]
내림차순을 구하고 싶을땐 b - a로 순서를 바꿔주면 됩니다.
numbers.sort((a,b) => b - a);
마찬가지로 화살표 함수로 간단하게!
여기 게시글을 보면 sort 메서드의 동작 방식이 자세히 나와있으니 좀 더 이해가 필요하면 읽어보시는걸 추천드려요!
사실 sort 메서드의 원리가 잘 이해가 안됐다.
왜 a - b가 오름차순 정렬인지, 이건 그냥 외우는 공식같은건지
그래서 이것저것 많이 찾아보고 직접 해보고 했더니 이제 좀 이해가 되는 너낌🧐
알고리즘의 세계는 어럽다..어려워..😥