Python 76 - 정렬 _ 실전 문제 2 ("성적 낮은 순서로 학생 출력하기")

2021. 7. 7. 14:10python

반응형

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

문제 

N명의 학생 정보가 있다. 학생 정보는 학생의 이름과 학생의 성적으로 구분된다. 각 학생의 이름과 성적 정보가 주어졌을 떄 성적이 낮은 순서대로 학생의 이름을 출력하는 프로그램을 작성하시오.

입력조건

첫 번쨰 줄에 학생의 수 N이 입력된다. ( 1 <= N <= 100,000 )

두 번째 줄부터 N + 1 번째 줄에는 학생으 ㅣ이름을 나타내는 문자열 A와 학생의 성적으로 나타내는 정수 B가 공백으로 구분되어 입력된다. 문자열 A의 길이와 학생의 성적은 100이하의 자연수이다.

출력조건

모든 학생의 이름을 성적이 낮은 순서대로 출력한다. 성적이 동일한 학생들의 순서는 자유롭게 출력해도 괜찮다.

문제해설

이 문제에서는 학생의 정보가 최대 100,000개까지 입력될 수 있으므로 최악의 경우 O(NlogN)을 보장하는 알고리즘을 이용하거나 O(N)을 봉장하는 계수 정렬을 이용하면 된다. 그뿐만 아니라 입력되는 데이터는 학생의 이름과 점수지만 출력할 때는 학생의 이름만 출력하면 되므로 학생 정보를 (점수, 이름)으로 묶은 뒤에 점수를 기준으로 정렬을 수행해야 한다. 따라서 이런 경우에도 마찬가지로 파이썬의 기본 정렬 라이브러리를 사용하는 것이 효과적이다. 

답안예시

# N을 입력받기
n = int(input())

# 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=' ')

 


본 포스팅은 ‘이것이 코딩 테스트다 with 파이썬’을 읽고 공부한 내용을 바탕으로 작성하였습니다.

 

 

 

작성자 : 엄코딩 eomcoding

반응형