728x90

 

JAVA로 프로그래밍을 하다 보면 배열이나 리스트정렬해야 될 때가 있습니다.

 

1차원 배열은 간단히 sort() 메서드를 사용하여 간편하게 정렬할 수 있지만 2차원 배열을 정렬하기 위해서는 다른 방법이 필요합니다. 

 

이번 포스팅에서는 이 "다른 방법"에 대해서 살펴보겠습니다.

 

1차원 배열의 정렬

오름차순 정렬

import java.util.Arrays;

public class SortExample {
    public static void main(String[] args) {
        int[] arr = {5, 3, 8, 1, 2};

        // 오름차순 정렬
        Arrays.sort(arr);  // 기본 정렬은 오름차순
        System.out.println("오름차순 정렬: " + Arrays.toString(arr));
    }
}

 

먼저, 두 숫자를 오름차순으로 정렬하는 방법을 살펴보겠습니다. 오름차순 정렬은 작은 값이 앞에 오고 큰 값이 뒤에 오는 순서로 정렬하는 것입니다.

 

내림차순 정렬

import java.util.Arrays;
import java.util.Collections;

public class SortExample {
    public static void main(String[] args) {
        Integer[] arr = {5, 3, 8, 1, 2};

        // 내림차순 정렬
        Arrays.sort(arr, Collections.reverseOrder());
        System.out.println("내림차순 정렬: " + Arrays.toString(arr));
    }
}

 

두 숫자를 내림차순으로 정렬하는 방법입니다. 내림차순 정렬은 큰 값에 오고 작은 값에 오는 순서로 정렬하는 것입니다.

 

2차원 배열의 정렬

2차원 배열은 행(row)열(column)로 구성되어 있으며, 각 요소는 배열 내 위치에 따라 인덱스로 접근할 수 있습니다. 이를 이용해 특정 기준에 따라 배열을 정렬할 수 있습니다.

 

이중 배열을 정렬하고 싶은 경우 Comparator를 쓰거나 람다식(Lamda)을 쓰면 됩니다.

 

오름차순 정렬

import java.util.Arrays;

public class SortExample {
    public static void main(String[] args) {
        int[][] arr = {{3, 4}, {1, 2}, {5, 1}};

        // 오름차순 정렬 (첫 번째 열 기준)
        Arrays.sort(arr, (a, b) -> a[0] - b[0]);
        System.out.println("오름차순 정렬: " + Arrays.deepToString(arr));
    }
}

 

"(a, b) -> a - b"를 사용하면 오름차순으로 정렬할 수 있습니다. 이는 배열이나 리스트에서 사용될 수 있습니다.

 

(a, b) -> a - b는 Comparator의 compare 메서드를 오버라이딩하는 역할을 합니다.

 

이는 a가 b보다 작으면 음수를 반환하여 a가 b 앞에 오도록 정렬하게 됩니다.

내림차순 정렬

import java.util.Arrays;

public class SortExample {
    public static void main(String[] args) {
        int[][] arr = {{3, 4}, {1, 2}, {5, 1}};

        // 내림차순 정렬 (첫 번째 열 기준)
        Arrays.sort(arr, (a, b) -> b[0] - a[0]);
        System.out.println("내림차순 정렬: " + Arrays.deepToString(arr));
    }
}

 

"(a, b) -> b - a" 를 사용하면 내림차순으로 정렬할 수 있습니다.

 

(a, b) -> b - a는 b가 a보다 크면 양수를 반환하여 b가 a 앞에 오도록 정렬하게 됩니다.

 

다중 정렬

import java.util.Arrays;

public class SortExample {
    public static void main(String[] args) {
        int[][] arr = {{3, 4}, {1, 2}, {5, 1}, {3, 2}};

        // 다중 기준 정렬: 첫 번째 열 오름차순, 첫 번째 열이 동일하면 두 번째 열 오름차순
        Arrays.sort(arr, (a, b) -> {
            if (a[0] == b[0]) {
                return a[1] - b[1];
            } else {
                return a[0] - b[0];
            }
        });
        System.out.println("다중 기준 정렬: " + Arrays.deepToString(arr));
    }
}

 

때로는 여러 기준에 따라 정렬을 해야 할 때가 있습니다.

 

다음 예제는 첫 번째 열을 오름차순으로 정렬하되, 첫 번째 열의 값이 같으면 두 번째 열을 내림차순으로 정렬하는 예제입니다.

 

Comparator 또는 람다 표현식에서 (a, b)는 두 요소를 비교할 때 사용되며, 첫 번째 요소 a두 번째 요소 b보다 작을 때음수를 반환하여 a가 b보다 앞에 오도록 정렬하게 됩니다. 이는 오름차순으로 정렬하는 방식입니다.

  • (첫 번째 요소, 두 번째 요소) 일 때, "첫 번째 요소 - 두 번째 요소" ➡️ 오름차순
  • (첫 번째 요소, 두 번째 요소) 일 때, "두 번째 요소 - 첫 번째 요소" ➡️ 내림차순

 

 

람다 정렬의 장점

  1. 간결함
    •  람다 표현식을 사용하면 코드가 매우 간결해집니다.
    • 기존의 Comparator 인터페이스를 익명 클래스 방식으로 구현하던 방식보다 훨씬 짧고 읽기 쉽습니다.
  2. 가독성
    •  람다 표현식을 사용하면 정렬 기준이 명확히 드러나기 때문에 가독성이 높아집니다.
  3. 유연성
    •  다양한 정렬 기준을 쉽게 적용할 수 있습니다. 예를 들어, 다중 기준 정렬도 간단하게 구현할 수 있습니다.