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

The Flawless Bead·2023년 2월 15일
0

프로그래머스

목록 보기
15/20
post-thumbnail

🔗 문제로 이동 👉 [특이한 정렬]



이 문제의 핵심은 크게 아래와 같이 볼 수 있다.

🔗 정수 배열 내림차순 정렬


✅ 문제 풀이

  1. numlist를 내림차순으로 정렬한다 → n 과의 거리가 같다면 더 큰 수를 앞에 오도록 배치해야하기 때문
  2. 두 수의 차해당 인덱스를 담을 int[][] gap 배열 초기화
  3. 두 수의 차가 적은 순서대로 오름차순 정렬
  4. n과 가까운 순서대로 정렬한 배열 int[] answer 배열 초기화
import java.util.Arrays;
import java.util.Comparator;
import java.util.Collections;

class Solution {
    public int[] solution(int[] numlist, int n) {
        
        // numlist를 내림차순으로 정렬
        numlist = Arrays.stream(numlist)
                    .boxed().sorted(Collections.reverseOrder())
                    .mapToInt(Integer::intValue)
                    .toArray();
        
        // 두 수의 차와 해당 인덱스를 담은 배열
        int[][] gap = new int[numlist.length][2];
        for(int i = 0; i < numlist.length; i++) {
            int k = Math.max(numlist[i], n) - Math.min(numlist[i], n);
            gap[i][0] = k; 
            gap[i][1] = i;
        }
        
        // 두 수의 차가 적은 순서대로 오름차순 정렬
        Arrays.sort(gap, Comparator.comparing(i -> i[0]));
        
        // n과 가까운 순서대로 정렬한 배열
        int[] answer = new int[numlist.length];
        for(int i = 0; i < numlist.length; i++) {
            int index = gap[i][1];
            answer[i] = numlist[index];
        }
        
        return answer;
    }
}

profile
오늘을 살고 내일을 꿈꾸는 낭만주의자

0개의 댓글