Javascript - 특이한 정렬

이율곡·2023년 7월 15일

Programmers

목록 보기
32/44
post-thumbnail

특이한 정렬

문제

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

입출력 예

numlistnresult
[1, 2, 3, 4, 5, 6]4[4, 5, 3, 6, 2, 1]
[10000,20,36,47,40,6,10,7000]30[36, 40, 20, 47, 10, 6, 7000, 10000]

접근방법

이 문제의 핵심은 거리 계산과 정렬이다. 주어진 숫자 n과 배열 numlist의 각 요소와의 거리를 계산하고, 그 거리에 따라 배열을 정렬해야 한다. 거리가 같은 경우에는 더 큰 수가 앞에 오도록 해야 한다.

풀이

function solution(numlist, n) {
    numlist.sort((a, b) => {
        const distanceA = Math.abs(a - n);
        const distanceB = Math.abs(b - n);

        if (distanceA === distanceB) {
            return b - a;
        }

        return distanceA - distanceB;
    });

    return numlist;
}

우선 numlist를 sort() 메서드를 통해서 새롭게 정렬한다. distanceA,B는 n의 거리의 절댓값으로 얼마나 떨어져 있는지를 나타낸다.

조건문은 두 거리가 같을 경우 더 큰 수가 앞으로 올 수 있도록 한다. 그리고 두 거리가 다를 경우는 a가 더 가깝기에 그대로 반환해주면 된다.


정리하기

이번에는 두 수 사이의 거리를 구하고 정렬하는 문제를 풀어봤다. 이 문제를 풀면서 어떻게 접근해야 하는지에 대해 조금씩 감을 잡아갈 수 있었다. 꾸준히 풀면서 더 분석적이고 수학적인 사고를 길러야겠다.

profile
음악을 좋아하는 사람이 음악을 만들 듯, 개발을 좋아하게 될 사람이 쓰는 개발이야기

0개의 댓글