안녕하세요 성조입니다.
이 문제는 Python 3 버전을 기준으로 풀이됐습니다.
문제 출처
https://www.acmicpc.net/problem/5800
문제
한상덕은 이번에 중덕 고등학교에 새로 부임한 교장 선생님이다. 교장 선생님으로서 첫 번째 일은 각 반의 수학 시험 성적의 통계를 내는 일이다.
중덕 고등학교 각 반의 학생들의 수학 시험 성적이 주어졌을 때, 최대 점수, 최소 점수, 점수 차이를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 중덕 고등학교에 있는 반의 수 K (1 ≤ K ≤ 100)가 주어진다. 다음 K개 줄에는 각 반의 학생수 N (2 ≤ N ≤ 50)과 각 학생의 수학 성적이 주어진다. 시험 성적은 0보다 크거나 같고, 100보다 작거나 같은 정수이고, 공백으로 나누어져 있다.
출력
각 반에 대한 출력은 다음과 같이 두 줄로 이루어져 있다.
- 첫째 줄에는 "Class X"를 출력한다. X는 반의 번호이며 입력으로 주어진 순서대로 1부터 증가한다.
- 둘째 줄에는 가장 높은 점수, 낮은 점수, 성적을 내림차순으로 정렬했을 때 가장 큰 인접한 점수 차이를 예제 출력과 같은 형식으로 출력한다.
코드
import sys
K = int(sys.stdin.readline())
for i in range(K+1):
N, *array = map( int, sys.stdin.readline().split() )
array.sort()
distance = 0
for j in range(N-1):
distance = max(distance, abs( array[j]-array[j+1]))
print(f'Class {i+1}')
print(f'Max {array[-1]}, Min {array[0]}, Largest gap {distance}')
풀이
가장 큰 점수, 작은 점수, 성적을 내림차순으로 정렬했을 때 가장 큰 인접한 점수 차이를 출력하는 문제이다.
파이썬에서 제공하는 sort 함수를 통하여 정렬한다.
가장 큰 점수는 맨 뒤로 정렬하기 때문에 -1로 호출한다.
가장 작은 점수는 맨 앞으로 정렬하기 때문에 0번으로 호출한다.
값 사이에 대해서 본인은 5, 6이 처음에 정렬해야 하는 값의 범주의 값으로 착각했다. 하지만 문제를 다시 접했을 때 내림차 순으로 값을 구한 뒤 가장 차이가 나는 값을 찾는 문제였다.
sort() 함수로 이미 정렬이 됐기 때문에 다음과 같이 값이 나온다.
[23, 25, 30, 76, 78]의 값이 존재하며, 절댓값을 기준으로 얘기를 진행한다.
23-25 = 2 / 25-30 = 5 / 30-76 = 46 / 76-78 = 2
여기서 가장 큰 차이가 나는 값은 46이 된다.
이 값을 출력하면 된다.
오타나 이해가 안 가는 부분이 있다면 언제든지 댓글로 얘기해 주시면 감사드리겠습니다.
다음 포스팅 때 뵙겠습니다.
'백준 - Python' 카테고리의 다른 글
[백준 - 1026][Python] 보물 (0) | 2023.02.08 |
---|---|
[백준 - 11170][Python] 0의 개수 (0) | 2023.02.07 |
[백준 - 11004 ][Python] K번째 수 (0) | 2023.02.05 |
[백준 - 10773][Python] 제로 (0) | 2023.02.04 |
[백준-10815][Python] 숫자 카드 (0) | 2023.02.03 |