문제
N명의 학생 정보가 있다. 학생 정보는 학생의 이름과 학생의 성적으로 구분된다. 각 학생의 이름과 성적 정보가 주어졌을 때 성적이 낮은 순서대로 학생의 이름을 출력하는 프로그램을 작성하시오.
입력
첫 번째 줄에 학생의 수 N이 입력된다. (1≤N≤100,000)
두 번째 줄부터 N+1번째 줄에는 학생의 이름을 나타내는 문자열 A와 학생의 성적을 나타내는 정수 B가 공백으로 구분되어 입력된다. 문자열 A의 길이와 학생의 성적은 100 이하의 자연수이다.
출력
모든 학생의 이름을 성적이 낮은 순서대로 출력한다. 성적이 동일한 학생들의 순서는 자유롭게 출력해도 괜찮다.
입력 예시
2
홍길동 95
이순신 77
출력 예시
이순신 홍길동
문제 해설
N의 크기가 100,000이기 때문에 시간 복잡도가 O(NlogN)인 정렬 방식을 사용해야 한다.
이름은 문자열이고, 점수는 정수이기 때문에 두 타입을 모두 고려할 수 있는 타입을 사용해야 한다. 튜플을 사용하면 쉽게 해결할 수 있다. tuple()의 인자로는 list를 넣어주면 된다.
#N 입력
N = int(input())
#이름, 점수 입력
arr = []
for i in range(N):
data = input().split()
arr.append(tuple(data))
#lambda를 이용하여 정렬
arr.sort(key=lambda x:x[1])
#출력
for a in arr:
print(a[0],end=" ")
'이코테 > 정렬' 카테고리의 다른 글
실전 문제 - 두 배열의 원소 교체 (0) | 2021.10.08 |
---|---|
실전 문제 - 위에서 아래로 (0) | 2021.10.08 |
계수 정렬 (0) | 2021.09.17 |
퀵 정렬 (0) | 2021.09.14 |
삽입 정렬 (0) | 2021.09.10 |