https://www.acmicpc.net/problem/10825
문제
도현이네 반 학생 N명의 이름과 국어, 영어, 수학 점수가 주어진다. 이때, 다음과 같은 조건으로 학생의 성적을 정렬하는 프로그램을 작성하시오.
국어 점수가 감소하는 순서로(내림차순)
국어 점수가 같으면 영어 점수가 증가하는 순서로(오름차순)
국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키 코드에서 대문자는 소문자보다 작으므로 사전순으로 앞에 온다.)
정렬하는 문제입니다. 다만 그리고 각 학생들은 국어점수, 영어점수, 수학점수 모든 점수가 같으면 이름 순으로 어떤 순서가 있는데 이는 오름차순이기도 내림차순이기도 합니다.
그리고 직접 정렬 알고리즘을 짤필요 없이 굉장히 쉽게 풀 수 있습니다.
sort에 key를 지정 할 수 있는데 여러개의 키를 오름차순,내림차순 순서로 지정하는 것 역시 간단합니다.
특정한 기준으로 정렬하는 대부분의 문제를 해결할 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
n = int(input())
students = [] #학생 정보를 담을 리스트
#모든 학생 정보를 입력받기
for _ in range(n):
students.append(input().split())
students.sort(key=lambda x: (-int(x[1]), int(x[2]), -int(x[3]), x[0]))
#정렬된 학생 정보에서 이름만 출력
for student in students:
print(student[0])
정렬하는 순서의 기본 값은 오름차순입니다. 그런데 반대로 -를 붙이게 되면 제일 큰 수는 제일 작은수가 되니 이렇게 정렬을 하면 내림차순으로 정렬하는 것과 같은 효과를 얻을 수 있습니다.
https://docs.python.org/ko/3/howto/sorting.html
더 자세한 정렬은 위 파이썬 문서를 참고하시면 됩니다.
Comments powered by Disqus.