[이코테]성적이 낮은 순서로 학생 출력하기

developsy·2022년 5월 10일
0

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

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

  2. 두 번째 줄부터 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 = ' ')
                
profile
공부 정리용 블로그

0개의 댓글