엄지월드

백준 5800 성적 통계 본문

알고리즘

백준 5800 성적 통계

킨글 2024. 5. 8. 23:02

문제

 

설명

기본적으로는 문제에서 요구하는 대로 하면 된다.

for문을 여러번 돌면서 구하는 것보다, 조금 효율적인 방법이 없을까 하다가.

Collections.sort를 통해 정렬을 하게 되면 Max, Min 값을 한번에 구할 수 있을 것 같아서 sort 처리했다.

Largest는 sort한 후에 for문을 돌면서 현재 index와 다음 index를 비교하면서 max 값을 찾아주었다. 

 

코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        final int loop = Integer.parseInt(br.readLine());
        for (int i = 0; i < loop; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            final int loop2 = Integer.parseInt(st.nextToken());
            List<Integer> list = new ArrayList<>();
            for (int j = 0; j < loop2; j++) {
                final int num = Integer.parseInt(st.nextToken());
                list.add(num);
            }
            Collections.sort(list);
            final int size = list.size();
            int maxGaap = -1;
            for (int j = 0; j < size-1; j++) {
                maxGaap = Math.max(maxGaap, list.get(j+1) - list.get(j));
            }
            bw.write("Class " + (i + 1) + "\n");
            bw.write("Max " + list.get(list.size() - 1) + ", Min " + list.get(0) + ", Largest gap " + maxGaap + "\n");
        }

        bw.flush();
        bw.close();
    }

}
Comments