백준 5800 성적 통계 JAVA 풀이 (정렬, 구현)

2026. 4. 6. 17:01·코테(Solved.ac + Programmers)
728x90

🔗 문제 링크

🔗 https://www.acmicpc.net/problem/5800


📌 문제 개요

각 반의 학생 점수가 주어질 때, 반마다 다음 값을 구하는 문제이다.

  • 최대 점수 (Max)
  • 최소 점수 (Min)
  • 인접 점수 간 최대 차이 (Largest gap)

📌 접근 방법

이 문제는 정렬을 기반으로 해결

  1. 점수를 배열에 저장
  2. 오름차순 정렬 수행
  3. 정렬된 배열을 기준으로
    • 첫 번째 값 → 최소값
    • 마지막 값 → 최대값
  4. 인접한 점수 차이를 계산하며 최대 gap을 찾는다

📌 핵심 아이디어

이 문제의 핵심은 Largest gap의 정의

  • 단순히 최대값 - 최소값이 아니라
    정렬 후 인접한 점수 간 차이의 최대값

 

예시: 70 71 72 100

정렬 후: 70 71 72 100

gap:

  • 71 - 70 = 1
  • 72 - 71 = 1
  • 100 - 72 = 28

Largest gap = 28


📌 전체 코드

import java.io.*;
import java.util.*;

public class Main {
    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 cnt = 1; cnt <= K; cnt++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int studentCount = Integer.parseInt(st.nextToken());

            int[] scores = new int[studentCount];
            for (int i = 0; i < studentCount; i++) {
                scores[i] = Integer.parseInt(st.nextToken());
            }

            Arrays.sort(scores);

            int min = scores[0];
            int max = scores[studentCount - 1];
            int maxGap = 0;

            for (int i = 0; i < studentCount - 1; i++) {
                int gap = scores[i + 1] - scores[i];
                maxGap = Math.max(maxGap, gap);
            }

            sb.append("Class ").append(cnt).append("\n");
            sb.append("Max ").append(max)
              .append(", Min ").append(min)
              .append(", Largest gap ").append(maxGap)
              .append("\n");
        }

        System.out.print(sb);
    }
}

📌 정리

  • 정렬 후 인접 비교가 핵심
  • gap 배열을 따로 만들 필요 없이 하나의 변수로 해결 가능
  • 시간복잡도: O(N log N)
728x90

'코테(Solved.ac + Programmers)' 카테고리의 다른 글

백준 1769 3의 배수 JAVA 풀이 (문자열, 구현, 수학)  (0) 2026.04.07
백준 1236 성 지키기 JAVA 풀이 (구현, 그리디)  (0) 2026.04.06
백준 2828 사과 담기 게임 JAVA 풀이 (그리디, 구현)  (0) 2026.04.04
백준 16435 스네이크버드 JAVA 풀이 (그리디, 정렬)  (0) 2026.04.03
백준 1652 누울 자리를 찾아라 JAVA 풀이 (구현, 문자열, 완전탐색, 시간복잡도)  (0) 2026.04.02
'코테(Solved.ac + Programmers)' 카테고리의 다른 글
  • 백준 1769 3의 배수 JAVA 풀이 (문자열, 구현, 수학)
  • 백준 1236 성 지키기 JAVA 풀이 (구현, 그리디)
  • 백준 2828 사과 담기 게임 JAVA 풀이 (그리디, 구현)
  • 백준 16435 스네이크버드 JAVA 풀이 (그리디, 정렬)
PUSH → MERGE → DEPLOY
PUSH → MERGE → DEPLOY
데이터 흐름과 운영 자동화를 설계하는 백엔드 개발자
  • PUSH → MERGE → DEPLOY
    Coding Dongin
    PUSH → MERGE → DEPLOY
  • 전체
    오늘
    어제
    • MEUN
      • 코테(Solved.ac + Programmers)
      • BootCamp(JAVA)
      • JAVA
      • SpringBoot
      • JavaScript
      • JSP
      • DB(SQL)
      • React
      • HTML_CSS
      • jQuery
      • SCSS
      • GSAP
      • 설치 + 꿀팁
      • 정보처리기사 오답노트
      • 정보처리기사 기출문제
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • GIT
  • 공지사항

  • 인기 글

  • 태그

    정처기
    시뮬레이션
    java
    정처기실기
    dp
    완전탐색
    백엔드개발자
    solved.ac
    정보처리기사 실기 기출문제
    알고리즘
    정보처리기사
    피보나치
    백준
    springboot
    level1
    문자열
    프로그래머스
    브루트포스
    구현
    실기
    코딩테스트
    level0
    정처기오답노트
    배열
    자료구조
    Level2
    정렬
    기출문제
    수학
    자바
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.4
PUSH → MERGE → DEPLOY
백준 5800 성적 통계 JAVA 풀이 (정렬, 구현)
상단으로

티스토리툴바