문제
해설
학생 정보가 100,000(10만)개 입력 최악의 경우 → O(NlogN)을 보장하는 알고리즘 이용
이름, 점수를 입력받아 점수 기준으로 정렬하고 이름 출력 → 파이썬 튜플 & 기본 정렬 라이브러리 사용
* 튜플 자료형
- 대입 연산자(=)를 사용하여 값을 변경할 수 없다.
- 그래프 알고리즘을 구현할 때 자주 사용된다. ex) 다익스트라 최단 경로 알고리즘
- 흔히 서로 다른 성질의 데이터를 (비용, 노드 번호)의 형태로 함께 튜플로 묶어서 관리하는 것이 관례
* 람다(lambda) 함수
- 익명함수, 바로 정의하여 사용할 수 있는 함수
- 형식 : lambda 인자: 표현식
ex) sum = lambda x: x+1 - 인자 넣기 : 람다 표현식을 괄호로 묶은 후, 다시 괄호를 붙이고 함수를 붙이고 인수를 넣어 호출
- 인자 두개 쓰기 : lambda x, y: x+y
- if 사용하기 : check_success = lambda x: 'success' if x>=80 else 'fail'
* 정렬 key에 사용
- 튜플로 우선순위 정할 수 있음
- - 붙이면 현재와 반대차순으로 정렬
e = sorted(a, key = lambda x : (x[0], -x[1]))
# [(0, 1), (1, 2), (3, 0), (5, 2), (5, 1)]
f = sorted(a, key = lambda x : -x[0])
# [(5, 1), (5, 2), (3, 0), (1, 2), (0, 1)])
풀이
# 변수 : N 사람 수
# N을 입력받기
n = int(input())
# 변수 : array 학생 정보 리스트 [0]이름 [1]점수
# N명의 학생 정보를 입력받아 리스트에 저장
array = []
for i in range(n):
input_data = input().split() # 입력데이터 분리하여 각각 리스트로 저장
# 이름은 문자열 그대로, 점수는 정수형으로 변환하여 저장
array.append((input_data[0], int(input_data[1])))
# 키(Key)를 이용하여, 점수를 기준으로 정렬
array = sorted(array, key=lambda student: student[1])
# 정렬 수행된 결과를 출력
for student in array:
print(student[0], end=' ')
해석
변수 : N 사람 수, array 학생 정보 리스트 [0]이름 [1]점수
1. 사람 수(N) 입력받기
2. 학생 정보 입력받아, array에 문자형 변환 및 저장
3. 키를 이용하여 점수(student[1]) 기준으로 정렬
4. 출력 예시에 알맞게 출력하기
'Programming > 알고리즘 & 코테' 카테고리의 다른 글
[이진 탐색] 알고리즘 개념 (0) | 2023.12.26 |
---|---|
[정렬] 두 배열의 원소 교체 (실전문제, 이것이 코딩테스트다 with 파이썬) (2) | 2023.12.26 |
[정렬] 위에서 아래로 (실전문제, 이것이 코딩테스트다 with 파이썬) (1) | 2023.12.26 |
[정렬] 알고리즘 개념 (1) | 2023.12.20 |
[DFS/BFS] 미로 탈출 (실전문제, 이것이 코딩테스트다 with 파이썬) (1) | 2023.12.18 |