코딩테스트

코테 Lv0 - 특이한 정렬

Beekei 2024. 11. 11. 20:49
반응형

문제 설명

정수 n을 기준으로 n과 가까운 수부터 정렬하려고 합니다. 

이때 n으로부터의 거리가 같다면 더 큰 수를 앞에 오도록 배치합니다. 

정수가 담긴 배열 numlist와 정수 n이 주어질 때 numlist의 원소를 n으로부터 가까운 순서대로 정렬한 배열을 return 하도록 solution 함수를 완성해 주세요.

제한사항

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

입출력 예

입출력 예 #1

Input : [1, 2, 3, 4, 5, 6](numList), 4(n) / Output : [4, 5, 3, 6, 2, 1]

더보기
더보기

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

입출력 예 #2

Input : [10000, 20, 36, 47, 40, 6, 10, 7000](numList), 30(n) / Output : [36, 40, 20, 47, 10, 6, 7000, 10000]

더보기
더보기

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

입출력 예 #3

Input : [10, 2](numList), 6(n) / Output : [10, 2]

더보기
더보기

10과 2는 거리가 같으므로 더 큰 10이 앞에 와야 합니다.

제출코드

import java.util.Arrays;
import java.util.Comparator;

class Solution {
    public int[] solution(int[] numlist, int n) {
        return Arrays.stream(numlist).boxed()
            .sorted((a, b) -> 
                Math.abs(a - n) == Math.abs(b - n) ? 
                    b.compareTo(a) : 
                    Integer.compare(Math.abs(a - n), Math.abs(b - n)))
            .mapToInt(a -> a)
            .toArray();
    }
}
  1. 주어진 numlist를 stream화 하고 Interger 형태로 변환합니다.
  2. 변환한 stream을 각 원소값과 n의 거리(원소값 - n의 절댓값)가 같다면 원소값이 큰 원소가 앞으로, 거리가 다르다면 거리값이 작은 원소가 앞으로 오도록 정렬합니다.
    주의할 점은 b.compareTo(a)는 Interger.compare(b, a)와 같으니 주의해서 사용해야 합니다.
  3. 변환한 Interger형태를 다시 int로 변환 후 Array 형태로 반환합니다.

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

반응형