[자바] int[] 내림차순 정렬

Heon·2023년 7월 2일
0

자바

목록 보기
4/4

개요

알고리즘 문제를 풀던 중 int 타입의 두 배열을 하나는 오름차순 나머지 하나는 내림차순 정렬을 진행해야 했다.

오름차순은 Arrays.sort()을

내림차순은 Collections.reverseOrder()를 활용하여 정렬을 진행하려 했는데

오름차순 진행하는 A는 잘 되지만 B에서 컴파일에러가 잡혔다.

뭔가 하고 보니 다음과같이 T타입의 객체를 받는단다.

근데 왜 A는 잘 됐을까??

왜 그런가 하고 해당 메소드의 오버로딩된 여로 메소드들에 대한 매개변수를 찾아봤다. 매개변수에 커서를 두고 Cmd+p (윈도우 ctrl+p) 누르면 확인 가능하니 참고하자

원인

Arrays.sort 에서는 원시타입의 배열과 Object를 상속받는 모든 객체들을 받을 수 있는데 Comparator를 받을 수 있도록 오버로딩된 메소드는 Object를 받고 있는데 나는 int타입을 넣었다…!

💡 따라서 Object로 형변환이 가능한 Integer 객체로 바꿔주면 해결!

코드


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

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int k = sc.nextInt();

        int[] A = new int[n];
        Integer[] B = new Integer[n];
        for (int i = 0; i < n; i++) {
            A[i] = sc.nextInt();
        }
        for (int i = 0; i < n; i++) {
            B[i] = sc.nextInt();
        }
        Arrays.sort(A);
        Arrays.sort(B, Collections.reverseOrder());

        System.out.println(Arrays.toString(A));
        System.out.println(Arrays.toString(B));
    }
}

참고

혹시 매개변수로 int[]을 받는 상황처럼 형변환을 해야 한다면 스트림을 통해 간단하게 변환이 가능하니 참고하도록 하자.

int[] ints = {5, 2, 9, 1, 7};

Integer[] integerArray = Arrays.stream(ints).boxed().toArray(Integer[]::new);
Arrays.sort(integerArray, Collections.reverseOrder());
int[] ints = {5, 2, 9, 1, 7};
Arrays.stream(ints).boxed().sorted(Collections.reverseOrder());
profile
코딩일기

0개의 댓글