Algorithm/Baekjoon
[Python3] 백준(Baekjoon) 국영수 10825
앵도라지
2023. 1. 31. 20:10
문제 :
도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다. 이때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오.
- 국어 점수가 감소하는 순서로
- 국어 점수가 같으면 영어 점수가 증가하는 순서로
- 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
- 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)
접근 :
lambda를 활용하면 아주 손쉽게 풀 수 있다.
arr에 추가할때, 알아보기 쉽도록, 국어 영어, 수학, 이름 순서로 append 했다.
key=lambda x : (-x[0], x[1], -x[2], x[3])로 설정함으로서, 국어는 감소하고 영어는 증가하고, 수학은 감소하고, 사전순은 증가하는 식을 한 눈에 보기 편하게 짰다.
풀이 :
import sys
input = sys.stdin.readline
N = int(input())
arr = []
for _ in range(1, N+1):
name, korean, english, math = map(str, input().split())
korean = int(korean)
english = int(english)
math = int(math)
arr.append([korean, english, math, name])
arr.sort(key=lambda x:(-x[0], x[1], -x[2], x[3]))
for i in range(len(arr)):
print(arr[i][3])