<aside> 👉🏿 문제 링크

</aside>

문제 정리

<aside> 👉🏿 테스트케이스 n이 주어진다.

n개의 입력값이 주어지는데 나이와 이름을 입력받는다.

나이순으로 정렬하여 반환해라.

</aside>

# 입력값
3
21 Junkyu
21 Dohyun
20 Sunyoung

# 출력값
20 Sunyoung
21 Junkyu
21 Dohyun

접근 방법

<aside> 👉🏿 이 문제는 힙 정렬로 분류되어있어서 힙정렬로 구현해보았다.

비교를 위해 아래 두가지 방법으로 구현했다.

(1) Python sorted()

<aside> 👉🏿 sorted()를 사용했다.

  1. 입력값을 split()으로 받고, 리스트에 추가할 때 int, str 나누어서 append 되도록 처리했다.
  2. lambda를 사용해서 key를 나이로 잡고 정렬해서 출력하도록 했다. </aside>
import sys

def input():
    return sys.stdin.readline()

n = int(input())
li = []

for _ in range(n):
    line = input().split()              # 입력값 split()으로 받기
    li.append([int(line[0]), line[1]])  # 숫자형과 문자형으로 li에 추가.

# 키 = 나이로 정렬된 li를 반복해서 출력한다.
for i in sorted(li, key=lambda x:x[0]):
    print(' '.join(map(str,i)))

(2) heapq 모듈 사용

<aside> 👉🏿 입력값을 받는 부분까진 똑같다.

</aside>

import sys
import heapq

def custom_input():
    return sys.stdin.readline()

n = int(custom_input())
li = []

for i in range(n):
    line = custom_input().split()

<aside> 🔥 기본적인 heapq를 사용해서 heappop()을 했을 때 결과값에 넣어주면 나이순으로 정렬은 잘된다.

근데 문제의 조건 중 나이가 같을경우 입력값을 받은 순서대로 출력이 되야하는데,

정렬을 하게되면 순서가 다르게 출력이된다.

# 정답
20 Sunyoung
21 Junkyu
21 Dohyun

# 오답
20 Sunyoung
21 Dohyun
21 Junkyu

위 문제를 해결하기위해 우선순위를 인덱스를 기반으로 같이 넣어줬다.

같은 나이인 경우 입력값을 토대로 priority는 (21, 0), (21, 1) 이런식으로 순서가 생긴다.

(21,1) Dohyun

(21,2) Junkyu

</aside>

for i in range(n):
    line = custom_input().split()
    age = int(line[0])
    name = line[1]
    priority = (age, i)
    li.append((priority, name))