2022년 11월 4일에 작성됨
https://www.acmicpc.net/problem/10825
10825번: 국영수
첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1
www.acmicpc.net
문제 분석
정렬하는 sort함수를 이용하여 문제에서 주어진 조건에 따라 순서를 정하여 출력한다.
소스 코드 (⭕)
n = int(input())
lst = []
for i in range(n):
name, kor, eng, math = list(map(str, input().split()))
lst.append([name, int(kor), int(eng), int(math)])
lst.sort(key=lambda x: (-x[1], x[2], -x[3], x[0]))
for i in lst:
print(i[0])
코드 분석
1. 학생 수 n을 입력받고, n번 반복해준다.
2. 이름과 국어, 영어, 수학 성적을 각각 공백을 기준으로 문자열의 형태로 입력받은 것을 리스트 형태로 바꿔서 각 변수에 넣어준다.
3. lst 리스트에 각 학생의 정보를 전부 추가해준다.
4. lst의 값을 key=lambda를 이용하여 주어진 조건에 따라 정렬한다.
4-0. x[0]은 이름, x[1]은 국어, x[2]는 영어, x[3]은 수학
4-1. -x[1]는 lst의 두번째 요소 값을 비교하여 내림차순으로 정렬한다.
4-2. -x[1]값이 같으면, x[2]=> lst의 세번째 요소 값을 오름차순으로 정렬한다.
4-3. x[2]값도 같으면, -x[3]=> lst의 네번째 요소 값을 내림차순으로 정렬한다.
4-4. -x[3]값도 같으면, x[0]=> lst의 첫번째 요소 값을 오름차순으로 정렬한다.
5. 조건에 맞게 정렬한 lst 리스트의 0번째 인덱스 즉, 이름을 출력한다.
end
람다 함수 아직 거부감이 든다.. 많이 어려운 것 같다.
그래도 람다 함수에 대해서 찾아보고 하니까 감이 오기 시작한다.
확실하게 알아놓으면 엄청 유용하게 쓰일 것 같으니 얼른 익숙해지자!
'코딩테스트 & 문제 풀이' 카테고리의 다른 글
[Python]백준_4998 : 저금 (2) | 2023.10.31 |
---|---|
[Python]백준_2810 : 컵홀더 (0) | 2023.10.31 |
[Python]백준_5622 : 다이얼 (2) | 2023.10.30 |
[Python]백준_2628 : 종이자르기 (2) | 2023.10.30 |
[Python]백준_2581 : 소수 (2) | 2023.10.29 |