jyamethyst21 님의 블로그

백준 5800번- '성적 통계' (PYTHON 풀이) 본문

CODING 💻

백준 5800번- '성적 통계' (PYTHON 풀이)

jyamethyst21 2026. 2. 1. 14:54

문제:

 

학교 반 수와 각 반의 학생수 및 수학 성적이 주어질 때 첫째 줄에는 몇반인지, 둘째 줄에는 가장 높은 점수, 낮은 점수, 성적을 내림차순으로 정렬했을 때 가장 큰 점수 차이를 출력하면 된다. 이때 '내림차순으로 정렬했을 때 가장 큰 점수 차이'란 예를 들어, 정렬한 수가 [78,76,30,25,23]일 경우, 78과 76의 차이는 2, 76과 30의 차이는 46, 30과 25는 5, 25와 23의 차이는 2다. 이 중 (인접한 수)가장 차이가 큰 값은 46이므로 해당 값을 출력하면 된다.

 

풀이:

N = int(input())

for i in range(N):
    re = list(map(int,input().split()))
    re.pop(0)
    re = sorted(re, reverse=True)

    count = []
    for j in range(len(re)-1):
        gap = abs(re[j]-re[j+1])
        count.append(gap)

    print(f'Class {i+1}')
    print(f'Max {re[0]}, Min {re[-1]}, Largest gap {max(count)}')

반 수를 입력받고, 반복문을 돌면서 학생 수와 성적을 입력받는다. 그 다음 pop을 활용하여 학생 수인 첫번째 인자를 제거하고 나머지를 내림차순으로 정렬한다.

다음으로 gap을 구하기 위해 count 리스트를 초기화하고 반복문을 돌면서 인접한 수의 차이를 구해서 count에 추가한다. 인덱싱 에러가 날 수 있기 때문에 종료조건을 리스트 길이 -1로 맞추고, 차이는 절댓값으로 봐야하므로 abs 함수를 활용하였다.

그 다음 형식에 맞춰 출력하면 된다. 첫번째 줄은 몇반인지 출력하면 되고, 두번째 줄은 re 리스트를 정렬했으므로 첫번째 인덱스가 가장 큰 값, 마지막 인덱스가 가장 작은 값이므로 인덱싱을 통해서 출력한다. 그 다음 마지막인 Largest gap은 count 리스트에 차이를 전부 저장해놓은 상태이므로 가장 큰 값을 출력하면 통과된다.