언어+프레임워크/JAVA

[JAVA] 코테 기본기(1): 정렬 완벽 정리

깃짱 2025. 9. 4. 14:00
반응형
반응형

 

코테를 현재 준비하고 있다면 배열 / 리스트 / 일부 구간 / 커스텀 Comparator까지 자유자재로 다룰 수 있어야 합니다. 막상 코테 시작하면 생각이 잘 안 날 수 있는 문법이기 때문에 오늘 포스팅에서는 잘 정리해보려고 합니다!

🌏 자바 정렬 완벽 정리

✅ 기본 배열 정렬

// 오름차순 정렬
int[] arr = {5, 3, 8, 1};
Arrays.sort(arr);
// 결과: [1, 3, 5, 8]

// 내림차순 정렬 (int는 불가능, Integer로 변환해야 함)
Integer[] arr2 = {5, 3, 8, 1};
Arrays.sort(arr2, Collections.reverseOrder());
// 결과: [8, 5, 3, 1]

Tip: int[] 같은 기본형 배열은 Collections.reverseOrder() 못 쓰기 때문에, 내림차순 필요할 때는 Integer[]로 박싱하거나 직접 Comparator를 정의해야 합니다.

✅ 기본 리스트 정렬

List<String> list = new ArrayList<>(Arrays.asList("banana", "apple", "cherry"));

// 오름차순
Collections.sort(list);
// 결과: [apple, banana, cherry]

// 내림차순
Collections.sort(list, Comparator.reverseOrder());
// 결과: [cherry, banana, apple]

Tip: Collections.sort()는 리스트만 받습니다. 배열은 반드시 Arrays.sort()를 사용해야 합니다.

✅ 일부만 정렬하기 (부분 구간 정렬)

int[] arr = {5, 3, 8, 1, 7, 2};

// 인덱스 1 이상, 4 미만 구간만 정렬
Arrays.sort(arr, 1, 4);
// 결과: [5, 1, 3, 8, 7, 2]

// 리스트 일부 정렬
List<Integer> list = new ArrayList<>(Arrays.asList(5, 3, 8, 1, 7, 2));
list.subList(1, 4).sort(Comparator.naturalOrder());
// 결과: [5, 1, 3, 8, 7, 2]

주의: Arrays.sort(arr, from, to)는 from ≤ i < to 범위만 정렬합니다. (앞은 포함, 뒤는 미포함)

✅ 커스텀 정렬

아래 2가지 케이스로 대부분 커버가 될 것 같습니다.

Case 1: Array

int[][] arr = {
    {1, 5},
    {2, 3},
    {1, 2}
};

// 첫 번째 원소 기준 오름차순
Arrays.sort(arr, (a, b) -> Integer.compare(a[0], b[0]));
// 결과: {{1,5}, {1,2}, {2,3}}

// 첫 번째 같으면 두 번째 기준 정렬
Arrays.sort(arr, (a, b) -> {
    if (a[0] == b[0]) return Integer.compare(a[1], b[1]);
    return Integer.compare(a[0], b[0]);
});
// 결과: {{1,2}, {1,5}, {2,3}}

Case 2: Class

class Person {
    String name;
    int age;
    Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String toString() {
        return name + "(" + age + ")";
    }
}

List<Person> list = new ArrayList<>();
list.add(new Person("Kim", 25));
list.add(new Person("Lee", 20));
list.add(new Person("Park", 25));

// 나이 기준 오름차순, 나이 같으면 이름 오름차순
list.sort((p1, p2) -> {
    if (p1.age == p2.age) return p1.name.compareTo(p2.name);
    return Integer.compare(p1.age, p2.age);
});

// 결과: [Lee(20), Kim(25), Park(25)]

✅ 자주 쓰는 Comparator 패턴 모음

// 숫자 내림차순
list.sort((a, b) -> Integer.compare(b, a));

// 문자열 길이 기준
list.sort((a, b) -> Integer.compare(a.length(), b.length()));

// 여러 조건 (1순위 → 2순위)
list.sort(Comparator.comparing((Person p) -> p.age)
                    .thenComparing(p -> p.name));

✅ 정리

  1. 배열 정렬: Arrays.sort(arr)
  2. 리스트 정렬: Collections.sort(list) 또는 list.sort()
  3. 일부 구간 정렬: Arrays.sort(arr, from, to) / list.subList(from, to).sort()
  4. 커스텀 정렬: Comparator (배열 → Arrays.sort, 리스트 → list.sort)

여러모로 복잡한 정렬에는 배열보다는 리스트가 더 유리한 것 같은데, 다음 포스팅에서는 배열을 리스트로 변환하는 여러 가지 방법에 대해 포스팅하려고 합니다!

 

도움이 되었다면, 공감/댓글을 달아주면 깃짱에게 큰 힘이 됩니다!🌟
비밀댓글과 메일을 통해 오는 개인적인 질문은 받지 않고 있습니다. 꼭 공개댓글로 남겨주세요!

 

반응형