알고리즘
백준 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();
}
}