코딩테스트
코테 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]
제출코드
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();
}
}
- 주어진 numlist를 stream화 하고 Interger 형태로 변환합니다.
- 변환한 stream을 각 원소값과 n의 거리(원소값 - n의 절댓값)가 같다면 원소값이 큰 원소가 앞으로, 거리가 다르다면 거리값이 작은 원소가 앞으로 오도록 정렬합니다.
주의할 점은 b.compareTo(a)는 Interger.compare(b, a)와 같으니 주의해서 사용해야 합니다. - 변환한 Interger형태를 다시 int로 변환 후 Array 형태로 반환합니다.
출처 : https://school.programmers.co.kr/learn/courses/30/lessons/120880
반응형