종류: 정렬
문제 출처: 국영수
⛱️ 알고리즘
1. 국어 reverse=True
2. 국어, 영어(reverse=False)
3. 국어, 영어, 수학(reverse=True)
4. 이름 아스키코드 빠른순 (reverse=False)
⛱️ 알게된 점
student를 dict로 받아도 되고 list & tuple로 받는게 편하다
reverse말고 -로 reverse 역할을 할 수 있다!!!
문자열도 sorted가 가능하다!
packing, unpacking으로 효율적으로 입력 받자!
⛱️ 개선된 코드
처음 푼 코드보다 72ms정도 속도도 개선되고 코드도 간결해졌다.
import sys
input = sys.stdin.readline
N = int(input())
arr = []
for _ in range(N):
name, *scores = input().split() #socres: list
arr.append((name, *map(int, scores))) #list요소를 int로 바꾼뒤 unpacking
arr.sort(key=lambda x: (-x[1], x[2], -x[3], x[0]) )
for i in arr:
print(i[0])
처음에 내가 푼 코드
import sys
input = sys.stdin.readline
N = int(input())
arr = dict()
for i in range(N):
name, kor, eng, math = input().split()
arr[name]=[int(kor),int(eng),int(math)]
re = sorted(arr.items(), key = lambda item: (-item[1][0],item[1][1], -item[1][2], item[0]))
print(*list(map(lambda x: x[0], re)), sep='\n')