https://www.acmicpc.net/problem/10825
문제 해결을 위한 과정
이 문제는 정렬 알고리즘의 방식입니다. 문제에서 여러 가지 조건이 있는데 파이썬이 제공하는 기본적인 sort와 lambda만으로 해결이 가능한 문제입니다. 조건을 보면 다음과 같습니다.
- 국어 점수가 감소하는 순서로
- 국어 점수가 같으면 영어 점수가 증가하는 순서로
- 국어 점수와 영어 점수가 같으면 수학 점수가 감소하는 순서로
- 모든 점수가 같으면 이름이 사전 순으로 증가하는 순서로 (단, 아스키코드에서 대문자는 소문자보다 작으므로 사전 순으로 앞에 온다.)
이를 lambda에 넣을 조건이라고 생각하면 국어 점수는 감소하는 순서 즉 내림차순으로 정렬이 되어야 하므로 국어점수를 음수로 바꾸어서.
영어 점수의 경우 오름차순이므로 그대로.
수학점수의 경우 내림차순이므로 음수로 바꾸어서
이름의 경우 사전 순으로 증가하는 즉 오름차순이므로 그대로 lambda에 조건으로 넣어주면 되는 것입니다.
소스코드
1
2
3
4
5
6
7
8
9
10
|
N = int(input())
data = []
for i in range(N):
name, kor, eng, math = input().split()
data.append((name, int(kor), int(eng), int(math)))
data.sort(key = lambda x: ((-x[1]), x[2], (-x[3]), x[0]))
for i in range(N):
print(data[i][0])
|
cs |
'알고리즘 > 백준' 카테고리의 다른 글
백준 알고리즘 2110: 공유기 설치 (Python) (0) | 2020.12.18 |
---|---|
백준 알고리즘 18310: 안테나(Python) (2) | 2020.12.10 |
백준 알고리즘 16234: 인구이동(Python) (0) | 2020.12.07 |
백준 알고리즘 18428: 감시 피하기(Python) (0) | 2020.12.05 |
백준 알고리즘 14888: 연산자 끼워 넣기(Python) (0) | 2020.12.05 |