2022 연세대학교 미래캠퍼스 슬기로운 코딩생활에 N명의 학생들이 응시했다.
이들 중 점수가 가장 높은 k명은 상을 받을 것이다. 이 때, 상을 받는 커트라인이 몇 점인지 구하라.
커트라인이란 상을 받는 사람들 중 점수가 가장 가장 낮은 사람의 점수를 말한다.
- 코드
앞으로 정렬 문제는 차근차근 종류별로 풀어보려고 한다.
앞서 선택, 삽입, 버블, 카운팅 정렬을 코드로 만들었기에 이번에는 자바에 내재된 java.util.Arrays 클래스를 활용해봤다.
(다음 알고리즘 문제에서는 Arrays 클래스가 사용하는 합병정렬을 직접 코드로 작성할 예정이다.)
먼저 StringTokenizer로 공백으로 띄워진 각 데이터들을 정수로 변환해 변수, 배열에 대입했다.
정렬할 때에는 Arrays.sort를 사용했다. 두번째 파라미터에 Collections.reverseOrder 메소드를 작성해야 내림차순으로 정렬되는데, Collection 클래스의 도움을 받기 때문에 첫번재 파라미터는 기본 타입 int가 아닌 래퍼클래스인 Integer 배열로 받아야 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.StringTokenizer;
public class Cutline {
//입력값 1: 응시자수 수상자수
//입력값 2: 성적 (공백 기준)
//내림차순 정렬 후 커트라인(마지막 수상자 점수) 구하기
//Arrays.sort 사용
public static void main(String[] args) throws IOException {
new Cutline().print();
}
public void print() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int total = Integer.parseInt(st.nextToken()); //응시자 수
int winner = Integer.parseInt(st.nextToken()); //수상자 수
StringTokenizer st2 = new StringTokenizer(br.readLine());
Integer[] scoreArray = new Integer[total]; //내림차순 정렬 위한 Integer 배열 생성
int i=0;
while (st2.hasMoreTokens()){
scoreArray[i] = Integer.parseInt(st2.nextToken());
i++;
}
Arrays.sort(scoreArray, Collections.reverseOrder());
System.out.println(scoreArray[winner-1]);
}
}
'Programming > 알고리즘' 카테고리의 다른 글
재귀 알고리즘 (0) | 2023.02.14 |
---|---|
[백준/자바] 10870번 피보나치 수열 (0) | 2023.02.09 |
알고리즘 - 정렬 (ing) (0) | 2023.01.18 |
[백준/자바] 2587번 대표값2 - 카운팅 정렬 (0) | 2023.01.18 |
[백준/자바] 2750번 수 정렬하기 - 선택정렬, 삽입정렬, 버블정렬 (0) | 2023.01.18 |