문제 설명

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

 

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

 

입출력 예 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]
입출력 예 설명

입출력 예 #1

  • 4에서 가까운 순으로 [4, 5, 3, 6, 2, 1]을 return합니다.
  • 3과 5는 거리가 같으므로 더 큰 5가 앞에 와야 합니다.
  • 2와 6은 거리가 같으므로 더 큰 6이 앞에 와야 합니다.

입출력 예 #2

  • 30에서 가까운 순으로 [36, 40, 20, 47, 10, 6, 7000, 10000]을 return합니다.
  • 20과 40은 거리가 같으므로 더 큰 40이 앞에 와야 합니다.

 

 

list.sort((s1, s2) -> Integer.compare(Math.abs(s2-n), Math.abs(s1-n)));

import java.util.*;
class Solution {
    public int[] solution(int[] numlist, int n) {
        
        int[] answer = new int[numlist.length];
        
        List<Integer> list = new ArrayList<>();
        Arrays.sort(numlist); //[1,2,3,4,5,6]
        for(int i : numlist) list.add(i);
        
        //내림차순 [1,2,6,3,5,4] -> 차이[3,2,2,1,1,0]
        //위에서 오름차순으로 정렬한 값 유지하면서 차이값으로만 정렬 바꿈.
        list.sort((s1, s2) -> Integer.compare(Math.abs(s2-n), Math.abs(s1-n)));
        //오름차순 [4,5,3,6,2,1] : 차이 순서대로 정렬한 list 순서를 뒤집기만 함.
        Collections.reverse(list);
		//처음부터 오름차순 정렬을 하면, 절댓값이 같은 숫자들의 위치가 원하는 대로 나오지 않음
        
        //return list.stream().mapToInt(num -> num).toArray();
        
        int i = 0;
        for(int num : list){
            answer[i] = num;
            i++;
        }
        return answer;
        
    }
}

+ Recent posts