본문 바로가기
코딩테스트/자바 Level 0

[Java] 특이한 정렬

by onggury 2023. 7. 3.

문제

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

 

 

제한사항

  • 1 ≤ n ≤ 10,000
  • 1 ≤ numlist 의 원소 ≤ 10,000
  • 1 ≤ numlist 의 길이 ≤ 100
  • numlist 는 중복된 원소를 갖지 않습니다.

 

import java.util.*;

class Solution {
    public int[] solution(int[] numlist, int n) {
        int[] answer = new int[numlist.length];
        List<Integer> distance = new ArrayList<Integer>(Arrays.asList());
        Arrays.sort(numlist);
        
        for(int num : numlist) {
            distance.add(Math.abs(num-n));
        }
        
        int pnt = 0;
        while(pnt != numlist.length) {
            int minNum = Collections.min(distance);
            for(int i = numlist.length-1; i >= 0; i--) {
                if(minNum == distance.get(i)) {
                    distance.set(i, 10001);
                    answer[pnt] = numlist[i];
                    pnt++;
                }
            }
        }
        return answer;
    }
}

numlist를 정렬한 이유는, 뒤에서부터 탐색 할 예정이였기 때문에, 만약 같은 거리일 경우 더 큰 수를 우선순위로 두기 위함이다. 이제와서 생각났지만 내림차순으로 하면 뒤에서부터 탐색 할 필요가 없을 듯 하다.

그리고 탐색이 완료될 때마다 해당 값을 제한사항에서 벗어나는 값으로 바꿔서 다시 탐색되는 일이 없도록 했다.

 

 

출처

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