코딩테스트

정렬) 2차원 배열 정렬

hpehpeyy 2025. 4. 15. 14:24

💡전체 코드

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