2022 연세대학교 미래캠퍼스 슬기로운 코딩생활에 N 명의 학생들이 응시했다.
이들 중 점수가 가장 높은 k 명은 상을 받을 것이다. 이 때, 상을 받는 커트라인이 몇 점인지 구하라.
커트라인이란 상을 받는 사람들 중 점수가 가장 가장 낮은 사람의 점수를 말한다.
입력
첫째 줄에는 응시자의 수 N과 상을 받는 사람의 수 k 가 공백을 사이에 두고 주어진다.
둘째 줄에는 각 학생의 점수 x 가 공백을 사이에 두고 주어진다.
출력
상을 받는 커트라인을 출력하라.
예제 입력
5 2
100 76 85 93 98
예제 출력
98
일단 ArrayList을 사용해서 소팅을 하고, 이게 오름차순이니까 뒤에서부터 찾아서 출력하는 방식을 선택했고 문제도 맞았음
근데 일단 뭔가 단순 배열[] 보다 ArrayList에 익숙했고 소팅같은것도 잘 되어있어서 사용했는데 아차 싶었다
다행히도 찾아보니까 배열의 크기를 resize() 통해서 진행하는 케이스에서는 확실하게 성능이슈가 발생하지만
단순히 add(), remove() 와 같이 넣다뺐다 하면서 그렇게 많은 양을 넣고빼는게 아니기 때문에 사용해도 괜찮을 것 같다
풀이
import java.io.*;
import java.util.*;
public class conditional_25305{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int totalCnt = Integer.parseInt(st.nextToken());
int winnerCnt = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
ArrayList<Integer> list = new ArrayList<>();
for(int i=0; i<totalCnt; i++){
list.add(Integer.parseInt(st.nextToken()));
}
list.sort(Integer::compareTo);
System.out.println(list.get(totalCnt - winnerCnt));
}
}
그래도 까먹은거 같애서 배열로도 다시 풀어보았다
아오 Arrays.sort(배열, Collections.reverseOrder()) 함수에서 배열이 프리미티브 타입이면 안되고 래퍼 타입이여야 되는거였다니....
오늘도 하나 배웠습니다 감사합니다
import java.util.*;
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int totalCnt = Integer.parseInt(st.nextToken());
int winnerCnt = Integer.parseInt(st.nextToken());
Integer[] arr = new Integer[totalCnt];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < arr.length; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(arr, Collections.reverseOrder());
System.out.println(arr[winnerCnt-1]);
}
}