💻 입력 조건

  • 첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다.
  • 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다.
  • 점수는 1보다 크거나 같고, 100보다 작거나 같은 자연수이다.
  • 이름은 알파벳 대소문자로 이루어진 문자열이고, 길이는 10자리를 넘지 않는다.

💻 출력 조건

  • 문제에 나와있는 정렬 기준으로 정렬한 후 첫째 줄부터 N개의 줄에 걸쳐 각 학생의 이름을 출력한다.

💻 입력 예시

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()의 parameter인 key의 사용법을 숙지하고 있다면 해결할 수 있는 문제입니다. key를 이용하기 위한 함수 score_key가 여러 개의 값을 묶은 튜플을 반환해주면 원소 순서대로 기준으로 삼아 정렬을 하게 됩니다. 이때 튜플의 원소 앞에 -를 붙이게 된다면 내림 차순으로 정렬을 하게 됩니다. 위와 같은 sort() 함수의 특징들을 참고하여 문제를 해결하였습니다.

# n을 입력받기
n = int(input())

# 이름, 국어, 영어, 수학 점수 입력받기
score = []

for i in range(n):
    score.append(list(map(str,input().split())))

# key 활용을 위해 작성한 함수
def score_key(list_):
    return (-int(list_[1]), int(list_[2]), -int(list_[3]), list_[0])

# score_key의 return 값을 기준으로 정렬
score.sort(key = score_key)

# 정렬을 한 순서대로 이름을 출력
for inform in score:
    print(inform[0])
profile
AI를 공부하고 있는 학생입니다:)

0개의 댓글