우선 백준 10825에서의 정렬 조건은 다음과 같다.

위와 같은 정렬 조건을 '복합 정렬'이라고 부른다.
복합 정렬 : 여러 기준을 결합하여 데이터를 정렬하는 것을 의미한다. 이 때, 각 기준을 순서대로 적용하여 정렬 우선순위를 정하는 방식이다.
파이썬에는 복합 정렬을 위한 정렬 함수가 존재한다.
결론부터 얘기하자면, 아래와 같이 작성된다.
# 정렬
students_sorted = sorted(students, key=lambda x: (-x[1], x[2], -x[3], x[0]))
- students라는 리스트를 정렬함
- 기준이 될 인덱스를 제공함
- 나열된 순서대로 우선 순위가 부여됨
- -가 앞에 붙으면, 내림차순 정렬됨.
해당 함수는 앞 순서에서 정렬한 순서를 그대로 유지하면서 다음 정렬을 이어나가므로, 해당 문제를 해결하는 데 적합하다.
# 입력 받기
import sys
input = sys.stdin.read
data = input().splitlines()
# 학생 수
N = int(data[0])
# 학생 정보 리스트 생성
students = []
for i in range(1, N + 1):
name, korean, english, math = data[i].split()
students.append((name, int(korean), int(english), int(math)))
# 정렬
students_sorted = sorted(students, key=lambda x: (-x[1], x[2], -x[3], x[0]))
# 결과 출력
for student in students_sorted:
print(student[0])