
내가 생각했을때 문제에서 원하는부분
첫째 줄에 중덕 고등학교에 있는 반의 수 K (1 ≤ K ≤ 100)가 주어진다.
다음 K개 줄에는 각 반의 학생수 N (2 ≤ N ≤ 50)과 각 학생의 수학 성적이 주어진다.
시험 성적은 0보다 크거나 같고, 100보다 작거나 같은 정수이고, 공백으로 나누어져 있다.
각 반에 대한 출력은 다음과 같이 두 줄로 이루어져 있다.
첫째 줄에는 "Class X"를 출력한다. X는 반의 번호이며 입력으로 주어진 순서대로 1부터 증가한다.
둘째 줄에는 가장 높은 점수, 낮은 점수, 성적을 내림차순으로 정렬했을 때 가장 큰 인접한 점수 차이를 예제 출력과 같은 형식으로 출력한다.
내가 이 문제를 보고 생각해본 부분
입력 처리: BufferedReader를 사용하여 입력을 받는다.
점수 계산:
각 반의 학생 수와 점수를 입력받아 배열에 저장한다.
최대 점수와 최소 점수를 Arrays.stream()을 이용해 계산한다.
점수를 정렬한 후, 인접한 점수 차이를 계산하여 가장 큰 차이를 찾는다.
결과 출력: 결과를 StringBuilder에 저장한 후, 한 번에 출력한다.
코드로 구현
package baekjoon.baekjoon_27;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
// 백준 5800번 문제
public class Main954 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int K = Integer.parseInt(br.readLine());
for(int i = 1; i <= K; i++) {
String[] input = br.readLine().split(" ");
int N = Integer.parseInt(input[0]);
int[] scores = new int[N];
for(int j = 0; j < N; j++) {
scores[j] = Integer.parseInt(input[j + 1]);
}
// 최대 및 최소 점수 계산
int maxScore = Arrays.stream(scores).max().getAsInt();
int minScore = Arrays.stream(scores).min().getAsInt();
// 점수를 내림차순으로 정렬
Arrays.sort(scores);
int largestGap = 0;
// 가장 큰 인접한 점수 차이 계산
for(int j = 1; j < N; j++) {
int gap = scores[j] - scores[j - 1];
if(gap > largestGap) {
largestGap = gap;
}
}
// 결과를 StringBuilder에 추가
sb.append("Class ").append(i).append("\n");
sb.append("Max ").append(maxScore).append(", Min ").append(minScore)
.append(", Largest gap ").append(largestGap).append("\n");
}
// 최종 결과 출력
System.out.print(sb);
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.