난이도 : ●○○ | 풀이 시간 : 20분 | 시간 제한 : 1초 | 메모리 제한 : 256MB | 기출 : 핵심 유형
문제
- 학생의 수 n이 주어진다.
- n줄에 걸쳐 이름 국어점수 영어점수 수학점수가 입력된다.
- 다음 조건대로 정렬하고 난 후 학생들의 이름을 출력하라.
- 국어점수 내림차순으로 정렬
- 국어점수가 같으면 영어점수 오름차순으로 정렬
- 영어점수가 같으면 수학점수 내림차순으로 정렬
- 모든 점수가 같으면 이름의 오름차순으로 정렬
https://www.acmicpc.net/problem/10825
입력조건
- 첫째 줄에 학생 수 1<=n<=100,000이 주어진다.
- 둘째줄부터 이름 국어점수 영어점수 수학점수가 주어진다.
- 1<= 각 점수 <=100
- 이름은 알파벳 대소문자로 이루어져 있고 길이가 10자리를 넘지 않는다.
출력조건
- 기준 대로 정렬한 뒤 학생의 이름을 출력한다.
입력예시
12
Junkyu 50 60 100
Sangkeun 80 60 50
Sunyoung 80 70 100
Soong 50 60 90
Haebin 50 60 100
Kangsoo 60 80 100
Donghyuk 80 60 100
Sei 70 70 70
Wonseob 70 70 90
Sanghyun 70 70 80
nsj 80 80 80
Taewhan 50 60 90
출력예시
Donghyuk
Sangkeun
Sunyoung
nsj
Wonseob
Sanghyun
Sei
Kangsoo
Haebin
Junkyu
Soong
Taewhan
아이디어
- 이름 국어점수 영어점수 수학점수를 튜플의 형태로 리스트에 저장한다.
- sort() 함수의 key 속성을 이용해 문제에서 요구하는 대로 정렬한다.
n = int(input())
students = []
for i in range(n):
students.append((input().split()))
students.sort(key=lambda x: (-int(x[1]),int(x[2]),-int(x[3]),x[0]))
for student in students:
print(student[0])
후기
- 리스트명.sort(key=lambda x: ... ) lambda 뒤에 ,가 없다는 걸 주의하자.
출처
이것이 취업을 위한 코딩테스트다 with 파이썬
'Algorithm > [이코테] 알고리즘 유형별 기출문제' 카테고리의 다른 글
[이코테] 정렬 문제 - 실패율 python (0) | 2023.11.05 |
---|---|
[이코테] 정렬 문제 - 안테나 python (0) | 2023.11.05 |
[이코테] DFS/BFS 문제 - 경쟁적 전염 (1) | 2023.10.31 |
[이코테] DFS/BFS 문제 - 연구소 (0) | 2023.10.31 |
[이코테] DFS/BFS 문제 - 특정 거리의 도시 찾기 python (0) | 2023.10.28 |