Problem Solving/백준
[BOJ 백준] 10825번 : 국영수 (Python, 파이썬)
돌돌김
2021. 1. 9. 23:21
간단한 문제였지만 파이썬에서 람다를 활용하여 정렬하는 법을 알 수 있었다.
리스트에 들어오는 원소는 (Junkyu, 50, 60, 100)이다.
맨 앞에 문자가 있으므로 뒤에 숫자들도 문자로 인식된다.
그렇기 때문에 람다식에서 숫자들을 int로 형변환 해줘야 한다.
정렬순서는 문제에 나와있는 것과 동일하게 하면된다.
- 국어 점수가 감소하는 순서로
- 국어 점수가 같으면 영어 점수가 증가하는 순서로
- 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
- 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)
람다식의 기본적인 정렬기준은 오름차순인데, 국어점수는 감소하는 순서로 정렬을 해야하므로 앞에 - 를 붙여준다
소스코드
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]))