<aside> 👉🏿 문제 링크
</aside>
<aside> 👉🏿 테스트케이스 n이 주어진다.
n개의 입력값이 주어지는데 나이와 이름을 입력받는다.
나이순으로 정렬하여 반환해라.
</aside>
# 입력값
3
21 Junkyu
21 Dohyun
20 Sunyoung
# 출력값
20 Sunyoung
21 Junkyu
21 Dohyun
<aside> 👉🏿 이 문제는 힙 정렬로 분류되어있어서 힙정렬로 구현해보았다.
비교를 위해 아래 두가지 방법으로 구현했다.
<aside> 👉🏿 sorted()를 사용했다.
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)))
<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))