[프로그래머스LV0_ js]특이한 정렬(sort)

Hyoyoung Kim·2023년 5월 31일
0

프로그래머스 레벨0

목록 보기
27/28

특이한 정렬

https://school.programmers.co.kr/learn/courses/30/lessons/120880

문제설명

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

입출력 예시

코드 _ 방법1

function solution(numlist, n) {
    return numlist.sort((a,b)=>{
        const [aNum, bNum] = [Math.abs(a-n),Math.abs(b-n)]
        //거기가 같다면 큰 수를 위로 나열
        if(aNum===bNum) return b-a
        //다르다면 오름차순
        return aNum-bNum
    }
    )
}

console.log(solution([1, 2, 3, 4, 5, 6],4));
console.log(solution([10000,20,36,47,40,6,10,7000],30));

코드 _ 방법2

function solution(numlist, n) {
    // a와 b가 거리가 같으면 Math.abs(a - n) - Math.abs(b - n)가 0이 되니 
    // 단축평가 논리합(||)을 사용해 0이 되었을때 b-a가 실행되도록 설정한다. 
  return numlist.sort((a, b) => Math.abs(a - n) - Math.abs(b - n) || b - a);
}

console.log(solution([1, 2, 3, 4, 5, 6],4));
console.log(solution([10000,20,36,47,40,6,10,7000],30));

🧑‍💻 sort()

  • 배열을 리턴한다.
  • sort((a,b)=> a-b) -> 오름차순(작은 것부터 나열)
  • sort((a,b)=> b-a) -> 내림차순(큰 것부터 나열)
    • [5, 1, 3, 6]
  • sort 함수가 리턴하는 값이 0보다 작을 경우, a가 b보다 앞에 오도록 정렬.
    • 5-1 = 4 => 0보다 크니깐
  • sort 함수가 리턴하는 값이 0보다 클 경우, b가 a보다 앞에 오도록 정렬.
    • 1,5 이렇게 정렬해준다.

0개의 댓글