💡전체 코드
package ex;
import java.util.Arrays;
import java.util.Comparator;
public class SortEx {
public static void main(String[] args) {
int[][] arr = {{3,2},{4,1},{3,3},{1,4}};
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[0] == o2[0]) {
return o2[1] - o1[1];
}
return o2[0]-o1[0];
}
});
for(int[]a : arr) {
System.out.println(Arrays.toString(a));
}
}
}
🔽 정렬 기준
Arrays.sort(arr, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
if(o1[0] == o2[0]) {
return o2[1] - o1[1]; // 첫 번째 값이 같으면 두 번째 값 내림차순
}
return o2[0] - o1[0]; // 첫 번째 값 기준 내림차순
}
});
📌 첫 번째 기준: o[0] 기준 내림차순
- 두 원소 o1, o2의 첫 번째 값 (o1[0], o2[0])을 비교해서 큰 값이 앞으로 오게 정렬
- 예: 4가 3보다 크기 때문에 {4,1}이 {3,2}보다 앞에 위치
📌 두 번째 기준 (보조 기준): o[1] 기준 내림차순
- 만약 o1[0] == o2[0]이면, 즉 첫 번째 값이 같다면,
- 두 번째 값 (o1[1], o2[1])을 비교해서 큰 값이 앞으로 오도록 정렬
☑️ 예시
입력 배열
{ {3,2}, {4,1}, {3,3}, {1,4} }
정렬 단계
- 첫 번째 값 기준 내림차순 정렬 → 4 > 3 > 3 > 1
- 첫 번째 값이 같은 {3,2} 와 {3,3} 에 대해 보조 정렬 기준으로 두 번째 값을 비교 → 3 > 2 이므로 {3,3} 이 앞
결과
{ {4,1}, {3,3}, {3,2}, {1,4} }
🔍 return o2[0] - o1[0]이 왜 내림차순?
자바에서 Comparator는 다음 규칙에 따라 정렬한다.
• 음수 반환 → o1 < o2 (자리 바꾸지 않음)
• 양수 반환 → o1 > o2 (자리 바꿈)
• return o1[0] - o2[0] → 오름차순
• return o2[0] - o1[0] → 내림차순
'코딩테스트' 카테고리의 다른 글
정렬) 다양한 정렬 예제 (1) | 2025.04.16 |
---|