while (1): study();
[백준/10825] 국영수 본문
728x90
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
'알고리즘' 카테고리의 다른 글
[Amazon 인터뷰] 고정점 찾기 (0) | 2021.07.01 |
---|---|
[백준/1715] 카드 정렬하기 (0) | 2021.07.01 |
[2019 KAKAO BLIND RECRUITMENT] 실패율 (0) | 2021.07.01 |
[백준/18310] 안테나 (0) | 2021.06.30 |
[2020 카카오 신입 공채 1차] 블록 이동하기 (0) | 2021.06.27 |
Comments