일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- useAppDispatch
- ESlint
- Jest
- 무한 스크롤
- 호이스팅
- 공변성
- 반공변성
- 투포인터
- map
- webpack
- 이분 검색
- SSR
- app router
- 리터럴 타입
- async/await
- Cypress
- 결정 알고리즘
- recoil
- 태그된 유니온
- React
- Promise
- CORS
- CI/CD
- RTK Query
- TS
- 인터섹션
- autosize
- 타입 좁히기
- dfs
- tailwind
Archives
- Today
- Total
짧은코딩
10825 국영수(다중 정렬) 본문
반응형
https://www.acmicpc.net/problem/10825
10825번: 국영수
첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1
www.acmicpc.net
해결법
이 문제를 처음 보고 너무 복잡하게 생각했다. 곰곰히 생각을 하다가 "이 지문에 나온 정렬 조건을 반대로 실행하면 어떨까?" 생각이 들었다. 그래서 구글링을 했고 파이썬에 다중 정렬을 봤다. 이 문법을 자주 사용했지만 매번 잊어버렸고 정식 이름을 알게된건 이번이 처음이다. 그레서 잘 기억해야 겠다고 생각했다.
-다중 정렬
ary = sorted(ary, key = lambda x : x[0])
이렇게 lamda 함수를 사용하면되고 키 값을 사용하면 된다. x[i]에서 i 번째에는 정렬을 원하는 인덱스 숫자를 넣으면 그 인덱스 기준으로 정렬이 된다. 내림차순으로 정렬학고 싶으면 뒤에 reverse=True를 해주면 된다.
내 코드
n = int(input())
ary = []
for i in range(n):
a, b, c, d = input().split()
ary.append((a,int(b),int(c),int(d)))
ary = sorted(ary, key = lambda x : x[0], reverse=True)
ary = sorted(ary, key = lambda x : x[3])
ary = sorted(ary, key = lambda x : x[2], reverse=True)
ary = sorted(ary, key = lambda x : x[1])
for i in range(n-1, -1, -1):
print(ary[i][0])
교재 코드
n = int(input())
students = [] # 학생 정보를 담을 리스트
# 모든 학생 정보를 입력 받기
for _ in range(n):
students.append(input().split())
'''
[ 정렬 기준 ]
1) 두 번째 원소를 기준으로 내림차순 정렬
2) 두 번째 원소가 같은 경우, 세 번째 원소를 기준으로 오름차순 정렬
3) 세 번째 원소가 같은 경우, 네 번째 원소를 기준으로 내림차순 정렬
4) 네 번째 원소가 같은 경우, 첫 번째 원소를 기준으로 오름차순 정렬
'''
students.sort(key=lambda x: (-int(x[1]), int(x[2]), -int(x[3]), x[0]))
# 정렬된 학생 정보에서 이름만 출력
for student in students:
print(student[0])
교재에서는 더 간단하게 풀었다. int와 -를 사용하면 더 효율적으로 다중 정렬을 사용할 수 있다.
반응형
'코딩 테스트(Python) > 이것이 취업을 위한 코딩 테스트다' 카테고리의 다른 글
금광 (0) | 2022.07.25 |
---|---|
정렬된 배열에서 특정 수의 개수 구하기(이진 탐색 라이브러리 bisect) (1) | 2022.07.24 |
18352 특정 거리의 도시 찾기 (1) | 2022.07.21 |
18406 럭키 스트레이트 (0) | 2022.07.19 |
모험가 길드 (0) | 2022.07.18 |