백준 성적 통계

KIMYEONGJUN·2025년 3월 7일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫째 줄에 중덕 고등학교에 있는 반의 수 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();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글