코딩테스트/백준 주제별

[백준 정렬] 10825 국영수

scone 2022. 7. 10. 14:23

🥕 [ 백준 10825 ] 국영수

문제 링크

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

 

10825번: 국영수

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

www.acmicpc.net

 

🍒 문제 분석

1. 국어 점수는 감소하는 순서로

2. 국어 점수가 같으면 영어 점수가 증가하는 순서로

3. 국어 점수와 영어 점수가 같으면 수학 점수가  감소하는 추세로

4. 모든 점수가 같으면 이름 사전 순

 

 

🥑 코드

N = int(input())
mylist = []

for _ in range(N):
    name, kor, eng, mat = input().split()

    # 국어는 감수하는 순서로
    kor = -int(kor)
    # 영어는 증가하는 순서로
    eng = int(eng)
    # 수학은 감소하는 순서로
    mat = -int(mat)

    mylist.append([kor,eng,mat,name])

mylist.sort()
for i in mylist:
    print(i[3])

 

🍓 내 해결 과정

문제에서 나온 조건을 사용하여 고민없이 매우 간단하게 풀었다.

 

🌽 다른 사람 코드

N = int(input())
mylist = []

for _ in range(N):
    # 이름, 국어, 영어, 수학
    mylist.append(input().split())

mylist.sort(key = lambda x : (-int(x[1]), int(x[2]), -int(x[3]), x[0]) )
for i in mylist:
    print(i[0])

팀원분께서 sort 함수의 매개변수 가운데 key 라는게 있다는걸 알려주셨는데 완전 잊고 있었다.

 

🍉 깨달은 점 및 정리

 

sort 함수에는 key 라는 매개변수가 있다.

key 에는 lambda를 이용한 함수가 들어갈 수 있다.

이를 이용해 정렬 기준을 마음대로 정할 수 있다.