문제 링크 >> https://www.acmicpc.net/problem/10825
📋 문제
도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다.
이때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오.
- 국어 점수가 감소하는 순서로
- 국어 점수가 같으면 영어 점수가 증가하는 순서로
- 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
- 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)
👉 입력
첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다.
둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다.
점수는 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.
이름은 알파벳 대소문자로 이루어진 문자열이고, 길이는 10자리를 넘지 않는다.
👈출력
문제에 나와있는 정렬 기준으로 정렬한 후 첫째 줄부터 N개의 줄에 걸쳐 각 학생의 이름을 출력한다.
📝 풀이
n = int(input())
arr = []
for _ in range(n):
name, kor, eng, math = input().split()
arr.append([name, int(kor), int(eng), int(math)])
sortedArr= sorted(arr, key=lambda x:(-x[1], x[2], -x[3], x[0]))
for i in sortedArr:
print(i[0])
주어진 조건대로 정렬했다.
조건이 2개 이상일 경우 먼저 적용할 순서대로 소괄호를 이용해 조건에 사용될 키를 묶어준다.
이때 내림차순인 경우 -를 붙이면 된다.
'Algorithm > Python' 카테고리의 다른 글
[LeetCode] Valid Palindrome (0) | 2022.04.09 |
---|---|
[LeetCode] Palindrome Number (0) | 2022.04.09 |
[백준 10814번] 나이순 정렬 (0) | 2022.04.06 |
[백준 1343번] 폴리오미노 (0) | 2022.04.05 |
[백준 11508번] 2+1 세일 (0) | 2022.04.05 |
댓글