문제 설명
정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.
- 제한사항
- 1 ≤ n ≤ 10,000
- 1 ≤ numlist의 원소 ≤ 10,000
- 1 ≤ numlist의 길이 ≤ 100
- numlist는 중복된 원소를 갖지 않습니다.
풀이
const solution = (numlist, n) => numlist.sort((a,b) => {
if(Math.abs(a-n) - Math.abs(b-n) === 0) return b - a;
return Math.abs(a-n) - Math.abs(b-n)
});
알고리즘으로 짜봤으면 더 좋았을것 같긴 하다.
그냥 단순히 sort() 매서드를 사용해봤는데,
우선 거리를 비교해야 하니 Math.abs로 a-n과 b-n의 절대값을 구해서 비교 후
두 값이 같다면, 더 큰쪽을 앞으로 보내고,
같지 않다면 거리가 더 가까운 쪽을 앞으로 보내줬다.
※이후 알고리즘을 적용해서 해봤는데 오히려 더 느렸다.
뭔가 그냥 느낌적으로 sort() 매서드가 더 느릴거라고 생각했는데..
알아보니까 sort() 매서드는 알아서 제일 적합한 알고리즘으로 정렬해준다고 한다.
ㅎ.. 편견없이 살아야겠다.