문제 설명
정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return하도록 solution 함수를 완성해주세요.
제한 사항
- 1 ≤ n ≤ 10,000
- 1 ≤ numlist의 원소 ≤ 10,000
- 1 ≤ numlist의 길이 ≤ 100
- numlist는 중복된 원소를 갖지 않습니다.
입출력 예
나의 풀이
function solution(numlist, n) {
var answer = [];
let arr = numlist.map((el)=>el-n);
arr.sort((a,b) => {
if(Math.abs(a) === Math.abs(b)){
return b-a;
}
return Math.abs(a)-Math.abs(b);
});
for(let el of arr){
answer.push(n+el);
}
return answer;
}
우선 n의 값을 빼준 후 절대값으로 정렬해주면 되지 않을까?라는 생각으로 접근하였다. 접근 방식은 맞았고 아쉬웠던점은 처음에 n의 값을 빼고 마지막에 다시 n의 값을 더해주는 과정을 없앨 수 있지 않을까 생각하게되었다.
function solution(numlist, n) {
var answer = [];
numlist.sort((a,b) => {
if(Math.abs(a-n) === Math.abs(b-n)){
return b-a;
}
return Math.abs(a-n)-Math.abs(b-n);
});
answer = numlist;
return answer;
}
그래서 이와 같이 소스를 수정하였고 다른사람의 풀이를 보았다.
function solution(numlist, n) {
return numlist.sort((a, b) => Math.abs(a - n) - Math.abs(b - n) || b - a);
}
옵셔널 체이닝을 알고 있었지만 이렇게 활용할 수도 있구나.. 대단하다..