알고리즘공부(Algorithm Study)/문제풀이(ProblemSolving)

백준 25305 java - 커트라인(정렬)

Chann._.y 2022. 11. 25.
728x90
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;

public class boj_25305_커트라인 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n, k;

        // 커트라인이란 상을 받는 사람들 중 점수가 가장 가장 낮은 사람의 점수를 말한다.
        String temp[] = br.readLine().split(" ");
        n = Integer.parseInt(temp[0]);
        k = Integer.parseInt(temp[1]);

        temp = br.readLine().split(" ");

        Integer scores[] = new Integer[temp.length];

        for (int i = 0; i < temp.length; i++) {
            scores[i] = Integer.parseInt(temp[i]);
        }
        Arrays.sort(scores, Collections.reverseOrder());

        System.out.println(scores[k-1]);
    }
}

 

내림차순 정렬하려고 Arrays.sort(~, Collections.reverseOrder()); 호출 시 오류가 떴는데 알고 보니 primitive 1차원 배열로는 호출 불가능한 함수였다. 

 

sort 함수 오름차순, 내림차순 호출 시 각각 description을 확인 해 보니 오름차순의 경우 Object[]가 파라미터로 전달되고, 내림차순의 경우 제네릭, 두 번째 인자로 Comparator를 파라미터로 전달해줘야 했기 떄문에 에러가 발생했던 것이다. 아마 추측 컨대 Comparator의 경우 제네릭 타입을 처리하는데 primitive 타입은 처리할 수 없기 떄문에 그런게 아닐까 싶다. 고로 굳이 내림차순으로 정렬을 하기 위해 꼭 Collections.reverseOrder()을 호출할 필요 없이 forloop로 뒤에서부터 읽는게 더 낫지 않을까 싶다.

Arrays.sort(~) desc
Arrays.sort(~, ~) desc

예전에는 error trace가 떴을 때 바로 구글링을 해서 문제를 해결했지만 이제는 코드 내부까지 뜯어보려고하는 태도가 생겨 한층 더 발전한 느낌이었다.

728x90

댓글