반응형

백준 10825번 문제입니다. (solved.ac)기준 실버 4 문제입니다.

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

 

10825번: 국영수

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

www.acmicpc.net

이 문제는 key = lambda를 이용하여 아주아주 쉽게 풀 수 있기 때문에 key = lambda를 잘 모르시는 분들이라면 아래에 링크에서 한 번 보고 오시면 이해가 훨씬 수월하실 겁니다!

 

key = lambda의 사용법(기준을 정하여 정렬하기!!!)

 

파이썬[Python] 기준을 정하여 정렬하기( with key=lambda)

 파이썬에서는 sort(), sorted() 함수를 사용하여 간단히 오름차순으로 정렬할 수 있으며 reverse = True를 같이 사용하여 내림차순으로도 간단히 정렬할 수가 있습니다. 뿐만아니라 key = lambda를 사용하

soopeach.tistory.com

 

파이썬에서는 key = lambda를 이용하여 정렬 우선순위를 정해서 아주아주 쉽게 풀 수 있는 문제입니다!

 

import sys
# 학생의 수
n = int(sys.stdin.readline().rstrip())
info = []

# 학생의 수만큼 이름 국어 영어 수학 순으로 입력 받음
for _ in range(n):
    # 공백으로 데이터를 구분하여 입력받아 리스트로 변환
    input_data = list(sys.stdin.readline().rstrip().split())
    # 이름은 string으로 두고 나머지 점수들은 int로 변환하여 info에 넣어줌.
    info.append((input_data[0], int(input_data[1]), int(input_data[2]), int(input_data[3])))

# 국어 점수가 감소하는 순으로 / -student[1]
# 영어 점수가 증가하는 순으로 / student[2]
# 수학 점수가 감소하는 순으로 / -student[3]
# 모든 점수가 같으면 이름이 사전순으로 증가하는 순서로 / student[0]
# 단, 아스키 코드에서 대붐자느 소문자보다 작으므로 사전순으로 앞에옴
ans = sorted(info, key= lambda student : (-student[1], student[2], -student[3], student[0]))

for student in ans :
    # 정렬된 값을 이름(student[0])만 출력
    print(student[0])
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기