[백준/JAVA] 정렬 - 25305번 커트라인

신승현·2022년 9월 12일
0

더 좋은 문제 풀이가 있거나 궁금하신 점이 있다면 편하게 댓글 남겨주세요!


📝 문제


25305번 커트라인


🤷‍♂️ 접근 방법


커트라인을 구하는 문제로 N개의 점수를 입력 받고 이를 정렬하여 K번째 점수를 출력하는 되는 문제입니다. 이번 문제를 통해 내림차순으로 배열을 정렬하는 법을 알아보겠습니다.

📌 배열 내림차순 정렬 Collections.reverseOrder()

오름 차순 정렬의 경우 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]);


    }
}

Reference

profile
I have not failed. I've just found 10,000 ways that won't work. - Thomas A. Edison

0개의 댓글