[Javascript] 프로그래머스 - 중앙값 구하기(sort)

seoyeon·2023년 4월 20일
2

Javascript 공부하기

목록 보기
15/20
post-custom-banner

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

✔ 제한사항

  • array 의 길이는 홀수입니다.
  • 0 < array 의 길이 < 100
  • -1,000 < array 의 원소 < 1,000

📝 풀이

function solution(array) {
    // 오름차순으로 정렬
    array.sort(function(a,b){
        return a - b;
    });
    
    // 중앙값 계산
    var half = Math.floor(array.length / 2);
    return array[half];
} 

우선 정수 배열인 array.sort() 메서드를 이용해 오름차순으로 정렬합니다.

오름차순으로 정렬된 배열 array 를 반환해 중앙값을 계산해주면 끝! 😎

1. sort()

JavaScript에서 배열의 요소들을 정렬하기 위해 sort() 메서드를 사용합니다. sort() 메서드를 사용하면 배열의 요소를 오름차순 또는 내림차순 으로 정렬할 수 있습니다.
❗기존 배열의 요소들을 정렬합니다❗

sort() 메서드의 특징

  1. 기본적으로 오름차순으로 정렬합니다.
  2. 배열 요소를 문자열로 캐스팅하고 변환된 문자열을 비교하여 순서를 결정합니다.
  3. 배열의 요소가 undefined인 경우에는 문자열로 변환되지 않습니다.
  4. 배열의 요소가 undefined인 경우에는 배열의 맨 끝으로 정렬이 됩니다.

사용법

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 앞으로 오게 되버린것..!

2. 비교함수(compareFunction)

제대로 정렬을 하고 싶다면, 값을 비교해줄 수 있는 함수를 넣어줘야 합니다.

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가 오름차순 정렬인지, 이건 그냥 외우는 공식같은건지
그래서 이것저것 많이 찾아보고 직접 해보고 했더니 이제 좀 이해가 되는 너낌🧐
알고리즘의 세계는 어럽다..어려워..😥

post-custom-banner

0개의 댓글