백준 25305번 문제 커트라인(Java_자바)
https://www.acmicpc.net/problem/25305
25305번: 커트라인
시험 응시자들 가운데 1등은 100점, 2등은 98점, 3등은 93점이다. 2등까지 상을 받으므로 커트라인은 98점이다.
www.acmicpc.net
문제를 확인해 보면
주어진 점수 중에서 특정 등수의 점수를 찾는 문제,
예를 들어 5명의 학생의 점수가 주였을 때 2등의 점수를 찾자!
여태 내가 풀었던 문제들과 다른 점은..
높은 점수순부터 낮은 점수순으로 정렬(내림차순)을 요구한다는 점!
여태 풀어본 거는 오름차순...
그럼 아래 정리해 보자!
int n = sc.nextInt();
int k = sc.nextInt();
Integer arr[] = new Integer[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
변수 n 은 응시자의 수
변수 k는 상을 받는 사람의 수
arr 배열 안에 점수를 넣어주자!!
여기서
'Integer'로 배열을 선언한 이유는 배열을 내림차순으로 정렬하기 위해
'Arrays.sort()' 메서드는 기본적으로 오름차순 정렬,
하지만 'Collections.reverseOrder()' 함수를 사용하면 내림차순으로 정렬 가능
그러나 이 함수는 기본적으로 배열의 요소가 'Comparable' 인터페이스를 구현한 경우에만 사용가능한데,
기본 자료형(int, double 등)은 'Comparable' 인터페이스를 구현하지 않기 때문에
'Integer' 객체로 변환하여 저장!!
// 내림차순
Arrays.sort(arr, Collections.reverseOrder());
점수가 높은 순부터 낮은 순(내림차순)으로
정렬해 주자!
(*위 코드 Collections.reverseOrder() 간단하게 설명했습니다.)
코드를 합쳐보자!
Scanner
import java.util.Arrays;
import java.util.Collections;
import java.util.Scanner;
public class CutLine_25305 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int k = sc.nextInt();
Integer arr[] = new Integer[n];
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
// 내림차순
Arrays.sort(arr, Collections.reverseOrder());
System.out.print(arr[k-1]);
}
}
성공!!
이제 메모리를 더 줄여보자!
BufferedReader + StringTokenizer
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;
public class CutLine_25305 {
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st= new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
Integer arr[] = new Integer[n];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(st.nextToken());
}
// 내림차순
Arrays.sort(arr, Collections.reverseOrder());
System.out.print(arr[k-1]);
}
}
생각보다 많이 줄여진 걸 확인!!
앞으로
백준 성공 이미지는
빼도록 하자!