단계별로 풀어보기 > 정렬 > 커트라인
https://www.acmicpc.net/problem/25305
응시자 수 N, 상 받는 사람 수 k 일 때, 상 받을 수 있는 커트라인을 출력하라.
커트라인은 k번째 사람의 점수이다.

배열 score를 오름차순 정렬하고, score[N-k] 번째가 커트라인 k번째이다.
N-k 번째 인 이유는, score는 오름차순 정렬이 되어있으므로, 가장 뒤에있는 점수가 가장 큰 점수이다.
가장 큰 점수인 N 그 중 k번째 사람은 N-k번째이다.
% 배열을 기준으로 (N-1) - (k - 1) = N-k
import java.io.*;
import java.nio.Buffer;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(bf.readLine());
int N = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int[] score = new int[N];
st = new StringTokenizer(bf.readLine());
for(int i = 0; i<N; i++){
score[i] = Integer.parseInt(st.nextToken());
}
bf.close();
Arrays.sort(score);
bw.write(String.valueOf(score[N-k]));
bw.flush();
bw.close();
}
}
Review
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class BOJ_25305_커트라인_review {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
int[] scores = new int[N];
st = new StringTokenizer(br.readLine());
for(int i = 0; i<N; i++){
scores[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(scores);
bw.write(String.valueOf(scores[N-k]));
br.close();
bw.flush();
bw.close();
}
}
Array는 기본적으로 오름차순 배열 정렬만 된다.
만약 Arrays.sort(배열, Collections.reverseOrder())를 진행하여 내림차순 정렬하고 싶다면, score를 int가 아닌 객체타입인 Integer로 생성하면 된다.
Integer[] score = new Integer[N];

Review
