FrontEnd
Javascript
Diary
ML
CS
Django
Algorithm
AWS
Co-Work
HTML
CSS
Python
React
ReactNative

#42 알고리즘 연습 - 단어정렬(Python)

알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
길이가 짧은 것부터 길이가 같으면 사전 순으로

  • 입력
    첫째 줄에 단어의 개수 N이 주어진다. (1≤N≤20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
  • 출력
    조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.
예제 입력 1 예제 출력 1
13 i
but im
i it
wont no
hesitate but
no more
more wait
no wont
more yours
it cannot
cannot hesitate
wait
im
yours

문제풀이
일단 해당 문제를 풀때 있어서 쓸수있는 자료구조가 무엇인지 생각해보았다. 딕셔너리를 이용해서 하려고 하니까 len을 key값으로 쓰던 단어를 key값으로 쓰던 정렬을 하는데 손이 많이 가고 부적합할것 같았다. 뿐만아니라 if 문을 이용해서 enumerate 와 같은 내장함수를 통해 앞 뒤의 길이를 비교해서 정렬을 해주려고 하니 pythonic한것 같지 않았다. 따라서 sorted라는 내장함수와 함게 lambda를 이용해서 보다 직관적이고 간단하게 정렬을 하고자했다.

내 풀이 🏆

num = int(input()) #첫 기준이 되는 number를 받아주고 for문을 돌리며 list에다가 보관해준다.
temp_list = list()

for i in range(num):
    temp_list.append(input()) #각 line마다 받아야하므로 for문으로 append하는 방법 밖에 없을것 같다.

temp_list = list(set(temp_list)) #중복을 제거하기위해 한번 set으로 갔다가 다시 list로 오고
alpha_list = sorted(temp_list)   #기본적으로 sorted 는 문자의 경우 사전순으로 정렬을 해주므로 사전순 정렬을 base로 썼다.
len_list = sorted(alpha_list, key = lambda x : (len(x))) #그리고 그 이후의 값에 대해서는 key값을 len으로 두고 정렬을 했는데
                                #sorted의 경우 list가 변하는게 아니라 순서가 바뀐 list가 반환되는 형태이므로 저장해준다.
for i in len_list:
    print(i)