본문 바로가기

Algorithm/[이코테] 알고리즘 유형별 기출문제

[이코테] 정렬 문제 - 국영수 python

난이도 : ●○○ | 풀이 시간 : 20분 | 시간 제한 : 1초 | 메모리 제한 : 256MB | 기출 : 핵심 유형

 

 

문제

  • 학생의 수 n이 주어진다.
  • n줄에 걸쳐 이름 국어점수 영어점수 수학점수가 입력된다.
  • 다음 조건대로 정렬하고 난 후 학생들의 이름을 출력하라.
    • 국어점수 내림차순으로 정렬
    • 국어점수가 같으면 영어점수 오름차순으로 정렬
    • 영어점수가 같으면 수학점수 내림차순으로 정렬
    • 모든 점수가 같으면 이름의 오름차순으로 정렬

https://www.acmicpc.net/problem/10825

 

10825번: 국영수

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1

www.acmicpc.net

 

입력조건

  • 첫째 줄에 학생 수 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 파이썬