while (1): study();

[백준/10825] 국영수 본문

알고리즘

[백준/10825] 국영수

전국민실업화 2021. 6. 27. 19:42
728x90

출처: 10825번: 국영수 (acmicpc.net)

 

10825번: 국영수

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1

www.acmicpc.net

 

 sort함수에 대한 이해도가 있다면 쉽게 해결할 수 있는 문제입니다. N이 1 이상 100,000 이하이기 때문에 O(NlogN)의 시간복잡도를 보장하는 기본 정렬 기능을 사용할 수 있습니다. 소스코드는 다음과 같습니다.

n = int(input())
array = []
for _ in range(n):
    array.append(input())
array = [row.split() for row in array]

array.sort(key=lambda x: (-int(x[1]), int(x[2]), -int(x[3]), x[0]))

for a in array:
    print(a[0])

 여기서의 핵심은 이름에 대한 정렬입니다. 저는 처음에 각 character에 대해 ord() 함수를 사용하는 것을 생각했으나, 알고보니 sort함수의 key는 문자열에 대해서 자동으로 정렬을 제공합니다. 단, 문자열의 경우 -(마이너스) 연산을 이용한 역정렬이 불가능하기 때문에 역정렬을 해야 하는 경우 reverse 인자를 사용해야만 합니다.

728x90
Comments