본문 바로가기
문제풀이/백준

[백준✨] 10825번 <국영수> / Python 문제풀이

by 서상혁 2020. 9. 22.

해답)

import sys


def input():
    return sys.stdin.readline().rstrip()


scores = []
for _ in range(int(input())):
    name, kor, eng, math = input().split()
    kor, eng, math = map(int, [kor, eng, math])
    '''
  정렬의 우선순위는 
  1. 국어 내림차순
  2. 영어 오름차순
  3. 수학 내림차순
  4. 이름 오름차순

  이 순서에 맞게 튜플 형태로 리스트에 넣어준다.
  '''
    scores.append((kor, eng, math, name))

result = sorted(
    scores, key=lambda score: (-score[0], score[1], -score[2], score[3])
)

for person in result:
    print(person[3])

풀이)

정렬을 연습하기 좋은 문제 인 것 같습니다.

 

직접 for 문을 돌면서 if 문을 중첩 시켜서 해도 되지만, 대부분의 언어들에서 다중키 정렬을 지원하고, 속도도 직접 구현하는 것 보다 더 빠릅니다!!

  • 파이썬은 sorted(<이터러블>key=<정렬할 키 순서 함수>) 를 통해 다중키 정렬이 가능합니다.  

https://dailyheumsi.tistory.com/67

 

파이썬 정렬, 다중 조건으로 한 번에 하기.

파이썬으로 문제를 풀다보면, 여러 조건으로 소팅을 해야하는 경우가 있다. 일반적인 소팅은 다음과 같이 sorted() 혹은 .sort() 를 사용한다. a = [4,1,2,5,7,3,6] b = sorted(a) # b = [1,2,3,4,5,6,7] sorted()..

dailyheumsi.tistory.com

정렬의 우선순위는 

  1. 국어 내림차순

  2. 영어 오름차순

  3. 수학 내림차순

  4. 이름 오름차순

 

  이므로 이 순서에 맞게 튜플 형태로 리스트에 넣어줍니다.

그리고 튜플이 들어있는 리스트를 내림차순은 - , 오름차순은 + 순서에 맞게 정렬해줍니다.

최종적으로 이름만 출력합니다.

 

 

 

 

* 위 문제의 저작권은 백준(https://www.acmicpc.net/) 에 있습니다.

728x90

댓글