해답)
import sys
def input():
return sys.stdin.readline().rstrip()
scores = []
for _ in range(int(input())):
name, kor, eng, math = input().split()
kor, eng, math = map(int, [kor, eng, math])
'''
정렬의 우선순위는
1. 국어 내림차순
2. 영어 오름차순
3. 수학 내림차순
4. 이름 오름차순
이 순서에 맞게 튜플 형태로 리스트에 넣어준다.
'''
scores.append((kor, eng, math, name))
result = sorted(
scores, key=lambda score: (-score[0], score[1], -score[2], score[3])
)
for person in result:
print(person[3])
풀이)
정렬을 연습하기 좋은 문제 인 것 같습니다.
직접 for 문을 돌면서 if 문을 중첩 시켜서 해도 되지만, 대부분의 언어들에서 다중키 정렬을 지원하고, 속도도 직접 구현하는 것 보다 더 빠릅니다!!
- 파이썬은 sorted(<이터러블>, key=<정렬할 키 순서 함수>) 를 통해 다중키 정렬이 가능합니다.
https://dailyheumsi.tistory.com/67
정렬의 우선순위는
1. 국어 내림차순
2. 영어 오름차순
3. 수학 내림차순
4. 이름 오름차순
이므로 이 순서에 맞게 튜플 형태로 리스트에 넣어줍니다.
그리고 튜플이 들어있는 리스트를 내림차순은 - , 오름차순은 + 순서에 맞게 정렬해줍니다.
최종적으로 이름만 출력합니다.
* 위 문제의 저작권은 백준(https://www.acmicpc.net/) 에 있습니다.
728x90
'문제풀이 > 백준' 카테고리의 다른 글
[백준✨] 1992번 <쿼드트리> / Python 문제풀이 / (0) | 2020.10.27 |
---|---|
[백준✨] 1780번 <종이의 개수> / Python 문제풀이 (0) | 2020.10.02 |
[백준✨] 1106번 <제곱ㄴㄴ수> / Python 문제풀이 (0) | 2020.09.15 |
[백준✨] 3344번 < N-Queen > / Python 문제풀이 / (0) | 2020.08.07 |
[백준] 11650번 . 좌표 정렬하기 ✨ / Python 문제풀이 / 함수형 프로그래밍 (0) | 2020.08.05 |
댓글