sort를 통해 오름차순과 내림차순으로 정리할 수 있다. 코딩테스트 문제를 풀다보면 결국 오름, 내림 차순으로 정리해야 할 때가 많은 때 sort 메서드를 통해서 쉽게 가능하다.
const arr = [1,3,2,4,5];
// [1,2,3,4,5]
arr.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;
}