728x90
<문제 링크>
https://www.acmicpc.net/problem/10825
<문제 풀이>
- 학생 수가 100,000 이하이므로 효율적으로 값을 처리하기 위해 입력 값을 sys 라이브러리 사용
- 이름과 성적들이 짝을 이루기 때문에 dict 사용
정렬 조건이 여러 개이므로, 요구하는 조건 반대 순서대로 정렬 처리
<코드>
'''입력예시
12
Junkyu 50 60 100
Sangkeun 80 60 50
Sunyoung 80 70 100
Soong 50 60 90
Haebin 50 60 100
Kangsoo 60 80 100
Donghyuk 80 60 100
Sei 70 70 70
Wonseob 70 70 90
Sanghyun 70 70 80
nsj 80 80 80
Taewhan 50 60 90
'''
import sys
n = int(input())
student = {}
for i in range(n):
name,kor,eng,math = sys.stdin.readline().rstrip().split()
student[name] = [int(kor),int(eng),int(math)]
student = dict(sorted(student.items(), key=lambda x:(-x[1][0],x[1][1],-x[1][2],x[0])))
for i in student.keys():
print(i)
<고쳐야 할 점>
- 정렬을 위한 lambda 식 외우기
- 굳이 dict 사용하지 않아도 됨
- 하나의 lambda 식에 여러 조건으로 정렬 처리할 수 있음
'두두의 알고리즘 > 문제' 카테고리의 다른 글
[정렬] 프로그래머스 L1 '실패율' (Python) (0) | 2021.11.18 |
---|---|
[정렬] 난이도1, 백준 18310번 '안테나' (Python) (0) | 2021.11.17 |
[Dijkstra] 유명 알고리즘 대회 '전보' (Python) (0) | 2021.11.17 |
[Dijkstra] 프로그래머스 L2 '배달' (Python) (0) | 2021.11.17 |
[Dijkstra] 프로그래머스 L3 '가장 먼 노드' (Python) (0) | 2021.11.17 |