N명의 학생 정보가 있다. 학생 정보는 학생의 이름과 학생의 성적으로 구분된다. 각 학생의 이름과 성적 정보가 주어졌을 때 성적이 낮은 순서대로 학생의 이름을 출력하는 프로그램을 작성하시오.
첫 번째 줄에 학생의 수 N이 입력된다. (1<= N <= 100,000)
두 번째 줄부터 N + 1번째 줄에는 학생의 이름을 나타내는 문자열 A와 학생의 성적을 나타내는 정수 B가 공백으로 구분되어 입력된다. 문자열 A의 길이와 학생의 성적은 100 이하의 자연수이다.
<입력 예시>
2
홍길동 95
이순신 77
<출력 예시>
이순신 홍길동
# p180
n = int(input())
arr = []
for i in range(n):
x, y = input().split()
arr.append((x, int(y)))
for k in range(len(arr)):
print(sorted(arr, key = lambda x: x[1])[k][0], end = ' ')
정석대로 푼 코드이다. 딱히 뭐 설명할게 없다. 교재에서 계수 정렬을 언급하길래 계수정렬로도 풀어봤는데, 알고리즘 개념을 문제에 맞게 적용하여 푸는 것이 너무 어려웠다ㅠㅠ
#계수정렬
n = int(input())
arr = []
arr2 = [] #점수 저장용
for i in range(n):
x, y = input().split()
arr.append((x, int(y)))
arr2.append(int(y))
count = [0] * (max(arr2) + 1) #점수의 최댓값 만큼 리스트를 생성한다.
for j in arr:
count[j[1]] += 1
for i in range(len(count)):
if count[i] > 0: #만약 해당 점수가 하나 이상 있다면
for k in arr: # 이름과 점수가 저장된 리스트에서 하나하나 점수가 일치하는 것을 찾아서 표시한다.
if k[1] == i:
print(k[0], end = ' ')