국영수

문제 Acmicpc

Solution

1
2
3
4
5
6
7
8
n=int(input())
score=[]
for _ in range(n):
name,k,e,m=input().split()
score.append((name, int(k), int(e), int(m)))
score.sort(key=lambda x:(-x[1],x[2],-x[3],x[0]))
for i in score:
print(i[0])

정렬의 기준이 중첩되어 있을 때 key(기준)에서 lambda를 사용하는 방법이 핵심이다.

일반적으로 배열의 1번 인덱스를 기준으로 정렬할 때 lambda x:x[1], 1번 인덱스로 정렬 후 2번 인덱스로 정렬할 때 lambda x:(x[1], x[2]) 처럼 괄호 열고 인덱스만 차례로 넣으면 된다.

그런데 문제에서는 증가, 감소가 번갈아가며 정렬 기준이 주어지는데 이 때는 내림차순으로 정렬할 요소에 -를 붙이면 반대 정렬이 된다.