본문 바로가기

두두의 알고리즘/문제

[정렬] 백준 10825번 '국영수' (Python)

<문제 링크>

https://www.acmicpc.net/problem/10825

 

10825번: 국영수

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

www.acmicpc.net


<문제 풀이>

  1. 학생 수가 100,000 이하이므로 효율적으로 값을 처리하기 위해 입력 값을 sys 라이브러리 사용
  2. 이름과 성적들이 짝을 이루기 때문에 dict 사용
  3. 정렬 조건이 여러 개이므로, 요구하는 조건 반대 순서대로 정렬 처리

<코드>

'''입력예시
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 식에 여러 조건으로 정렬 처리할 수 있음