[Algorithm] (이코테) 성적이 낮은 순서로 학생 출력하기 - 파이썬

Suzie·2021년 3월 7일
0

💭    Algorithm

목록 보기
22/49
post-thumbnail

교재 : 이것이 코딩 테스트다 with 파이썬
CHAPTER 6 정렬
실전문제 6-2 위에서 아래로 180p


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

문제

N명의 학생의 성적 정보가 주어진다. 형식은 이름 성적 으로 주어지는데 이때 이들의 성적이 낮은 순으로 학생 이름을 출력하는 문제다.

입력

  • 첫 번째 줄에 학생의 수 N이 입력된다. (1 <= N <= 100,000)
  • 두 번째 줄 부터 N+1 번째 줄 까지 학생의 이름 그리고 성적이 공백으로 주어진다. 학생이름 길이는 100이하, 성적은 100이하 자연수로 주어진다.

출력

  • 모든 학생의 이름을 성적이 낮은 순으로 출력하면된다. 동일한 성적은 자유롭게 출력하면된다.

입력 예시

2
홍길동 96
이순신 78

출력 예시

이순신 홍길동



풀이

접근

보자마자 튜플로 풀어야겠구나 했는데.. 진짜 기본문법 왤케 안익혀지는지 튜플로 정렬 당췌 어케 하는 지 모르겠어서 고민을 좀 했다.. 근데 진짜 생각 안나서 그냥 하던데로(?) 배열 두개 만들어서 인덱스로 하려고 했는데 뭔가 이렇게 풀면 당연히 풀리겠다만... 안 멋질 것 같아서 ㅋㅋㅋㅋ 그냥 풀이 보고 정리 했다

Note

input_data = input().split() 이런게 되는 지 몰랐다.. list 둘러야 하는 줄?

제출 1 - 정답

n = int(input())
board =[]
for i in range(n):
    name, score = input().split()
    board.append((name, score))

arr = sorted(board, key=lambda student: student[1])

for i in arr:
    print(i[0],end=' ')

오답노트

죽음의 람다식... 아직도.. 잘 모르겠는데 암튼 key를 [1]로 뒀다는 거지..? 그래그래.. ㅠㅠ 다음에 문제 풀때 람다식 안보고 좀 써보고 싶다... ㅠㅠㅠ
암튼 너무 쉽지만... 파이썬 문법린이는 아직.. 잘 모르겠다구요....ㅠ

  • 책에 있는 솔루션
# 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=' ')



결과

  • 풀이시간 : 5분



References

이것이 코딩 테스트다 with 파이썬 - 나동빈 저

0개의 댓글