문제
세종이는 정보과학 선생님인 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
'코딩 어쩌구 > 코딩테스트' 카테고리의 다른 글
[코드업] 3004번 데이터 재정렬 (0) | 2021.11.10 |
---|---|
[코드업] 1805번 입체기동장치 생산공장 (0) | 2021.11.09 |
[이것이 코딩테스트다] 1. 출제 경향 분석 및 파이썬 문법 (1) | 2021.11.08 |
[코드업] 6098번 성실한 개미 (0) | 2021.11.08 |
[코드업] 6097번 설탕과자 뽑기 (0) | 2021.11.08 |