sort

김철회·2022년 11월 28일
0

sort를 통해 오름차순과 내림차순으로 정리할 수 있다. 코딩테스트 문제를 풀다보면 결국 오름, 내림 차순으로 정리해야 할 때가 많은 때 sort 메서드를 통해서 쉽게 가능하다.

const arr = [1,3,2,4,5];

// [1,2,3,4,5]
arr.sort();

숫자 뿐만이 아니라 알파벳도 가능하며 콜백함수를 통해서 원하는대로 정렬도 가능하다.

sort의 함정

sort는 아스키 코드를 기준으로 정렬한다. 하나의 요소를 문자로 취급하기 때문에 10의 1부터 확인하여 2보다 10이 앞에 있는 것이다.

const arr = [1,10,2,4,5];

// [1,10,2,4,5]
arr.sort();

이에 따라, sort에 콜백함수를 사용하여 오름차순과 내림차순을 원하는대로 사용할 수 있다.

오름차순

const arr = [1,10,2,4,5];

// [1,10,2,4,5]
arr.sort((a,b) => a-b);

내림차순

const arr = [1,10,2,4,5];

// [1,10,2,4,5]
arr.sort((a,b) => b-a);

원리는 다음과 같다.

  • 요소들을 a,b로 받아서 서로를 비교한다.
  • 반환값 < 0 => a를 b보다 앞에.
  • 반환값 = 0 => 순서 유지.
  • 반환값 > 0 => b를 a보다 앞에.

그렇다면, 위의 오름차순과 내림차순의 의미가 훨씬 와닿을 것이다.
a,b를 파라미터로 받아서 a-b의 값에 따라서 정렬할 수 있는 것이다.
해석하자면,
a = 1, b = 10이라고 할 때, a-b의 차이값을 sort 함수로 다시 보내주고 그걸 받은 sort 함수가 차이가 음수이기 때문에 a를 앞에 두면서 오름차순을 구현할 수 있다.

내림차순의 경우 똑같은 상황에서 b-a가 양수이므로, b를 앞에 a를 뒤에 두어 내림차순을 구현할 수 있다.

오름차순 내림차순 활용하기.

프로그래머스 코딩테스트 입문
정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.

ex) numlist = [1,2,3,4,5,6] n =4 return [4,5,3,6,2,1]

function solution(numlist, n) {
    var answer = [...numlist];
    
    answer.sort((a,b) => {
        if(Math.abs(a-n) !== Math.abs(b-n)) {
            return Math.abs(a-n) - Math.abs(b-n)   
        } else return b-a
    })
    
    return answer;
}
profile
안녕하세요!

0개의 댓글