<aside> 🔥 문제 링크
</aside>
<aside> 🔥 n개의 테스트케이스가 주어지고
n개의 줄에 걸쳐 단어가 한줄에 하나씩 주어진다.
다음 조건에 따라 정렬하는 프로그램을 작성하자.
단, 중복된 단어는 하나만 남기고 제거해야한다.
</aside>
# 입력값
13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours
# 출력값
i
im
it
no
but
more
wait
wont
yours
cannot
hesitate
<aside> 🔥 이번 정렬 문제는 병합 정렬로 접근을 해보았다.
길이순으로 정렬하기 위해 리스트 생성 자체를 [글자의길이, 글자]로 묶어서 생성했다.
중복은 set()으로 제거하고 다시 list()로 묶어 리스트화했다.
</aside>
<aside> 🔥 병합 정렬 알고리즘 작성
</aside>
import sys
def input():
return sys.stdin.readline().strip()
def merge(arr1, arr2):
result = []
i = j = 0
while i < len(arr1) and j < len(arr2):
if arr1[i] < arr2[j]:
result.append(arr1[i])
i += 1
else:
result.append(arr2[j])
j += 1
while i < len(arr1):
result.append(arr1[i])
i += 1
while j < len(arr2):
result.append(arr2[j])
j += 1
return result
def mergesort(lst):
if len(lst) <= 1:
return lst
mid = len(lst) // 2
L = lst[:mid]
R = lst[mid:]
return merge(mergesort(L), mergesort(R))
<aside> 🔥 리스트를 글자길이와 글자로 묶어서 생성한다.
</aside>
n = int(input())
li = [input() for _ in range(n)]
count_li = []
for i in li:
count_li.append((len(i), i))
<aside> 🔥 set()으로 중복 문자를 제거하고 다시 list()로 리스트화시켜준다.
</aside>
for word in mergesort(list(set(count_li))):
print(word[1])