알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
단, 중복된 단어는 하나만 남기고 제거해야 한다.
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
조건에 따라 정렬하여 단어들을 출력한다.
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
아이디어 : dictionary를 사용하여, {글자수: [ word1, word2 ], 글자수: [ word3 ]}과 같은 형식으로 만들어서 글자수에 따라 먼저 dictionary로 분류하고, 그 내부에서 사전순으로 바꾸는 방법을 채택하였다.
-> 이것의 나의 방법!
testCase = int(input()) # TestCase를 받는다.
ls = {}
for _ in range(testCase):
word = input()
if len(word) in ls.keys(): # Key값들 중에 글자갯수가 같은게 있는지 확인한다.
if word in ls[len(word)]: # 중복 제거를 위해서 내부에 해당 값이 있는지 없는지 확인한다.
pass
else:
ls[len(word)].append(word) # 중복이 아니라면, 해당 글자수에 해당하는 리스트에 추가한다.
else:
ls[len(word)] = [word] # 글자갯수가 같은게 없는, 즉 Key값이 없다면 생성하고 리스트에 해당 단어를 추가한다.
ls = dict(sorted(ls.items(), key=lambda item: item[0], reverse=False)) # key값을 기준으로 정렬한다.
for key, value in ls.items():
value.sort(reverse=True)
for i in range(len(value)):
print(value[-i-1])
Python의 sort method에는 len를 기준으로 정렬할 수 있다는 것을 알게 된 후 다시 만들어본 코드이다.
testCase = int(input())
ls = []
for _ in range(testCase):
ls.append(input())
ls = list(set(ls)) # set으로 중복 제거 후, list 변환
ls.sort() # 사전순으로 전체 정렬
ls.sort(key=len) # 단어의 길이를 기준으로 정렬
for i in ls:
print(i)