[ 프로그래머스 ] 특이한 정렬

Jean Young Park·2023년 7월 16일
0

알고리즘

목록 보기
21/22
  • 문제 설명

    정수 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);
}

옵셔널 체이닝을 알고 있었지만 이렇게 활용할 수도 있구나.. 대단하다..

0개의 댓글