java

백준 25305번 문제 커트라인(Java_자바)

먼지제거제 2024. 3. 11. 23:02

https://www.acmicpc.net/problem/25305

 

25305번: 커트라인

시험 응시자들 가운데 1등은 100점, 2등은 98점, 3등은 93점이다. 2등까지 상을 받으므로 커트라인은 98점이다.

www.acmicpc.net

 

25305번 커트라인 문제 내용

 

예제 입력/출력

 

 

문제를 확인해 보면

주어진 점수 중에서 특정 등수의 점수를 찾는 문제,

예를 들어 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]);
    }
}

 

생각보다 많이 줄여진 걸 확인!!


 

 

앞으로 

백준 성공 이미지는

빼도록 하자!