3. 성적이 낮은 순서로 학생 출력하기

3. 성적이 낮은 순서로 학생 출력하기

  • 난이도: Easy
  • 풀이 시간: 20분
  • 시간 제한: 1초
  • 메모리 제한: 128MB
  • 기출: D 기업 프로그래밍 콘테스트 예선

문제

My Code

n = int(input())

grades = [input().split() for _ in range(n)]

grades = sorted(grades, key=lambda x: x[1])

for info in grades:
    print(info[0], end=' ')

Output:
2
홍길동 95
이순신 77
이순신 홍길동

문제 해설

이 문제에서는 학생의 정보가 최대 100,000100,000 개까지 입력될 수 있으므로 최악의 경우 O(nlogn)O(nlogn) 을 보장하는 알고리즘을 이용하거나 O(n)O(n) 을 보장하는 계수 정렬을 이용하면 된다.

그뿐만 아니라 입력되는 데이터는 학생의 이름과 점수지만 출력할 때는 학생의 이름만 출력하면 되므로 학생 정보를 (점수, 이름)으로 묶은 뒤에 점수를 기준으로 정렬을 수행해야 한다.

따라서 이런 경우에도 마찬가지로 파이썬의 기본 정렬 라이브러리를 사용하는 것이 효과적이다.

n = int(input())

# n 명의 학생 정보를 입력받아 리스트에 저장
array = []
for i in range(n):
    input_data = input().split()
    # 이름은 문자열 그대로, 점수는 정수형으로 변환하여 저장
    array.append((input_data[0], int(input_data[1])))

# 키를 이용하여 점수를 기준으로 정렬
array = sorted(array, key=lambda student: student[1])

# 정렬이 수행된 결과를 출력
for student in array:
    print(student[0], end=' ')

Output:
2
홍길동 95
이순신 77
이순신 홍길동

좋은 웹페이지 즐겨찾기