[기초 Lv.0] 특이한 정렬

oaksusu·2024년 3월 16일
0
post-thumbnail

오답노트 19번

1. 문제 (링크) :

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

2. 내가 푼 방법 :

n과의 차이가 같은 경우에 대해서 if문으로 한번 걸러주고,
그 이외의 경우에서는 n과의 차이가 적은 숫자가 앞으로 오게 정렬하도록 함.

function solution(numlist, n) {
    return numlist.sort((a,b) => {
        if (Math.abs(n - a) === Math.abs(n - b)) {
            return a < b ? 1 : -1
        } 
        return Math.abs(n - a) > Math.abs(n - b) ? 1 : -1
    });
}

3. 괜찮아 보였던 풀이 방법 (참고할 만한 풀이):

내가 풀었던 방식과 유사하지만 || 논리연산자로 간단하게 푼 방식이 있어서 참고해서 다시 풀어봤다.
먼저 비교하는 두 숫자가 각각 n과의 차이(절대값)가 더 작은게 왼쪽에 오게 정렬하고,
두 숫자가 n과의 차이가 같을 경우엔 0일 테니 || 논리 연산자 오른쪽이 실행이 될때 두 숫자 중에서 큰게 왼쪽에 오게 정렬

function solution(numlist, n) {
    return numlist.sort((a,b) => Math.abs(n - a) - Math.abs(n - b) || b - a);
}
profile
삐약

0개의 댓글