Problem Solving/백준

[BOJ 백준] 10825번 : 국영수 (Python, 파이썬)

돌돌김 2021. 1. 9. 23:21

www.acmicpc.net/problem/10825

 

10825번: 국영수

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

www.acmicpc.net

 

간단한 문제였지만 파이썬에서 람다를 활용하여 정렬하는 법을 알 수 있었다.

 

리스트에 들어오는 원소는 (Junkyu, 50, 60, 100)이다.

 

맨 앞에 문자가 있으므로 뒤에 숫자들도 문자로 인식된다. 

 

그렇기 때문에 람다식에서 숫자들을 int로 형변환 해줘야 한다. 

 

정렬순서는 문제에 나와있는 것과 동일하게 하면된다. 

  1. 국어 점수가 감소하는 순서로
  2. 국어 점수가 같으면 영어 점수가 증가하는 순서로
  3. 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
  4. 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)

람다식의 기본적인 정렬기준은 오름차순인데, 국어점수는 감소하는 순서로 정렬을 해야하므로 앞에 - 를 붙여준다

 

 

 

소스코드
import sys
#sys.stdin = open("input.txt", "r")
n = int(input())
student = [list(map(str, input().split())) for _ in range(n)]
student.sort(key = lambda x : (-int(x[1]), int(x[2]), -int(x[3]), x[0]))

for name in student:
    print(''.join(name[0]))