더 좋은 문제 풀이가 있거나 궁금하신 점이 있다면 편하게 댓글 남겨주세요!
커트라인을 구하는 문제로 N개의 점수를 입력 받고 이를 정렬하여 K번째 점수를 출력하는 되는 문제입니다. 이번 문제를 통해 내림차순으로 배열을 정렬하는 법을 알아보겠습니다.
오름 차순 정렬의 경우 Arrays.sort(int arr[])
을 통해 오름 차순으로 정렬할 수 있습니다. 반대로 내림차순으로 정렬하기 위해서는 Collections의 도움을 받아 아래와 같이 Collections.reverseOrder()
를 인자로 추가해 주면 됩니다.
그러나, 아래와 같이 코드를 작성하면 컴파일 오류가 발생합니다.
int arr[] = new int[N];
Arrays.sort(arr, Collections.reverseOrder());
그 이유는 Arrays.sort의 경우 아래와 같은 형식을 사용하기 때문입니다. T는 Generic Class로 모든 객체를 허용하지만, int는 기본형 타입으로(Primitive type) Collections에서 사용하는 객체(Reference type)가 아닙니다. (primitive type과 reference type 차이)
public static <T> void sort(T[] a, Comparator <? super T> c)
하여 객체 타입인 Integer 타입으로 배열을 선언해 주어야 합니다.
Integer arr[] = new Integer[N];
다음으로는 코드에 적용시켜보겠습니다. 먼저 배열을 선언하여 N명의 점수를 입력받고, 내림차순으로 정렬해보겠습니다.
Integer arr[] = new Integer[N];
for(int i = 0; i< N; i++){
arr[i] = sc.nextInt();
}
//내림차순 정렬
Arrays.sort(arr, Collections.reverseOrder());
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();
//방법 1 내림차순 정렬
Integer arr[] = new Integer[N];
for(int i = 0; i< N; i++){
arr[i] = sc.nextInt();
}
Arrays.sort(arr,Collections.reverseOrder());
System.out.println(arr[k-1]);
//방법2 오름차순 정렬
int arr2[] = new int[N];
for(int i = 0; i< N; i++){
arr2[i] = sc.nextInt();
}
Arrays.sort(arr2);
System.out.println(arr2[N-k]);
}
}