728x90
📢 '이것이 코딩 테스트다 with 파이썬' 책을 공부하고 복습하기 위해 작성했습니다.
문제
N명의 학생 정보가 있고, 학생 정보는 학생의 이름과 성적으로 구분된다.
학생 정보가 주어졌을 때, 성적이 낮은 순서대로 학생의 이름을 출력하라.
입력 조건
- 첫 번째 줄부터 학생의 수 N이 입력된다. (1 <= N <= 100,000)
- 두 번째 줄부터 N+1번째 줄에는 학생의 이름을 나타내는 문자열 A와 학생의 성적을 나타내는 정수 B가 공백으로 구분되어 입력된다. 문자열 A의 길이와 학생의 성적은 100 이하의 자연수이다.
출력 조건
- 모든 학생의 이름을 성적이 낮은 순서대로 출력한다. 성적이 동일한 학생들의 순서는 자유롭게 출력해도 괜찮다.
입력 예시
2
홍길동 95
이순신 77
출력 예시
이순신 홍길동
나의 풀이
N = int(input())
info = []
for _ in range(N):
name, score = input().split()
info.append((name, int(score)))
# 함수 선언 후 사용
# def sorting(data):
# return data[1]
#
# info.sort(key=sorting)
# 람다 함수 사용
info.sort(key=lambda x: x[1])
for i in range(N):
print(info[i][0], end=" ")
해설
학생의 정보가 최대 100,000개까지 입력될 수 있으므로 최악의 경우 O(NlogN)을 보장하는 알고리즘을 이용하거나 O(N)을 보장하는 계수 정렬을 이용한다.
파이썬의 튜플을 이용해 학생 정보를 (이름, 점수)로 묶은 뒤에 점수를 기준으로 정렬을 수행한다.
728x90
'Algorithm' 카테고리의 다른 글
[이코테] 06. 이진탐색 (0) | 2024.01.07 |
---|---|
[이코테] 05. 정렬 - 두 배열의 원소 교체 (1) | 2024.01.05 |
[이코테] 05. 정렬 - 위에서 아래로 (0) | 2024.01.05 |
[이코테] 05. 정렬 (1) | 2024.01.05 |