멘토와 멘티 이름을 전달 받으면
멘토 이름은 사전 순서대로
멘토 이름이 같으면 멘티 이름은 역순으로 정렬 하는 문제
문제
서울사이버대학교에는 멘토링 프로그램이 있다. 멘토링 프로그램은 한 명의 멘토$($선배학습자$)$가 여러 명의 멘티$($후배학습자$)$에게 대학 생활에 대한 노하우와 정보 등을 전수하는 것이다.
빅데이터·AI 센터에서 딥러닝 서버를 돌리며 바쁜 나날을 보내던 노교수는, 어느 날 멘토링 회의 참석 요청이 들어와 이를 준비하던 도중 멘토-멘티 순서쌍 목록이 적힌 노트를 찾았다. 하지만 노트가 제대로 정리되어 있지 않아 분석이 어려웠으므로, 마침 센터에서 인턴을 하는 대학원생 뚜루에게 목록의 정렬을 맡기기로 했다.
하지만 논문을 쓰느라 수면 부족에 시달리고 있는 뚜루는 이러한 프로그램을 짤 틈이 나지 않았기 때문에, 당신에게 다시 목록을 맡겼다. 목록이 주어질 때 멘토를 기준으로 사전 순으로 정렬하되, 멘토가 같은 순서쌍들에 대해선 멘티의 사전 역순으로 정렬하자.
입력
첫 번째 줄에 멘토-멘티 순서쌍의 수 이 주어진다. $(1 \le N \le 100\,000)$
두 번째 줄부터 개의 줄에 걸쳐 목록에 포함된 각 순서쌍의 멘토의 이름과 멘티의 이름이 공백 하나로 구분되어 주어진다. 이름은 소문자로만 구성되며, 20자를 넘지 않는다. A가 B의 멘토인 동시에 B가 A의 멘토일 수 있다. 멘토와 멘티가 동일할 수 있다. 똑같은 멘토-멘티 순서쌍이 중복해서 주어지지 않는다.
출력
개의 줄에 걸쳐 정렬된 멘토-멘티 순서쌍 목록을 입력과 동일한 형식으로 출력한다.
import sys
# 정렬 함수
def f(N):
# 튜플로 받아서 리스트에 저장 > 속도 빨라짐
li = [tuple(sys.stdin.readline().split()) for _ in range(N)]
li.sort(key=lambda x:x[1], reverse=True)
li.sort(key=lambda x:x[0])
return li
li = f(int(sys.stdin.readline()))
# 각 튜플의 요소(멘토, 멘티)를 공백으로 이어 문자열로 저장
li = [" ".join(m) for m in li]
for m in li:
print(" ".join(m))
위의 과정에서 for 문 대신 각 문자열을 줄바꿈으로 이어 하나의 문자열로 생성 후 출력
import sys
def f(N):
li = [tuple(sys.stdin.readline().split()) for _ in range(N)]
li.sort(key=lambda x:x[1], reverse=True)
li.sort(key=lambda x:x[0])
li = [" ".join(m) for m in li]
return li
li = f(int(sys.stdin.readline()))
print("\n".join(li))
예제 입력 1
5
alice bob
alice dave
eve mallory
peggy victor
alice carol
예제 출력 1
alice dave
alice carol
alice bob
eve mallory
peggy victor
예제 입력 2
8
cgiosy jhnah
son kim
son lee
cgiosy leejseo
cgiosy junseo
son hwang
cgiosy sean
cgiosy cologne
예제 출력 2
cgiosy sean
cgiosy leejseo
cgiosy junseo
cgiosy jhnah
cgiosy cologne
son lee
son kim
son hwang
'IT > Python' 카테고리의 다른 글
[백준] 2231번 분해합 [Python] (0) | 2023.09.07 |
---|---|
[백준] 21316번 스피카 [Python] - 그래프이론 (0) | 2023.09.06 |
[프로그래머스] Lv.1 로또의 최고 순위와 최저 순위 [Python] (0) | 2023.09.06 |
[re] 정규식 기초 [Python] (0) | 2023.09.06 |