문제 설명
정수 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;
}
}
'◦ Algorithm > Java' 카테고리의 다른 글
프로그래머스 자바 치킨 쿠폰 (0) | 2023.02.17 |
---|---|
프로그래머스 자바 등수 매기기 (0) | 2023.02.17 |
프로그래머스 자바 문자열 밀기 (0) | 2023.02.17 |
프로그래머스 자바 저주의 숫자 3 (0) | 2023.02.17 |
프로그래머스 자바 최빈값 구하기 (0) | 2023.02.17 |