본문 바로가기
코딩 어쩌구/코딩테스트

[코드업] 3015번 성적표 출력

by annmunju 2021. 11. 10.

문제

세종이는 정보과학 선생님인 JH를 도와주기 위해 정보과학 성적처리 프로그램을 만들기로 했다.

JH 선생님은 학생들의 명단과 점수를 입력하면 상위 m명의 학생 명단을 출력해 주기를 원한다.

다음 조건을 만족하는 프로그램을 작성해 보자.

 

입력

첫째 줄에 데이터의 개수 n (3<=n<=100)과 출력인원 mm (1<=m<=n)이 공백으로 구분되어 입력된다.

둘째 줄부터 학생 이름과 점수(0 100)가 공백으로 구분되어 입력된다. 

단 이름의 길이는 최대 10바이트 이내이다.

출력

상위 m명의 학생명단을 출력한다.

단, 출력순서는 점수가 높은 학생이 먼저 출력되며, 점수가 같을 경우 입력 순서가 빠른 순서로 출력한다.

 

더보기

입력 예시  

4 2

Jeon 95

Kim 59

Lee 90

Bae 100

출력 예시

Bae

Jeon

 


 

나의 풀이

1. 입력하기. 리스트 형식 내부에 튜플로 (이름, 점수) 저장

n, m = map(int, input().split())
stu = [0 for _ in range(n)]

for cnt in range(n):
    name, score = input().split()
    stu[cnt] = (name, int(score))

 

2. operator의 itemgetter 함수를 불러와 리스트 안 튜플 내용(점수)으로 정렬

(operator.itemgetter 모듈은 주로 sorted와 같은 함수의 key 매개변수에 적용되어 다중 수준의 정렬을 가능하게 해주는 모듈)

from operator import itemgetter

stu.sort(key=itemgetter(1), reverse=True)

# stu
## [('Bae', 100), ('Jeon', 95), ('Lee', 90), ('Kim', 59)]

 

3. m만큼만 한줄씩 이름 출력

for i in range(m):
    print(stu[i][0])
    
# Bae
# Jeon

 

728x90