
import sys
n = int(sys.stdin.readline())
words = [sys.stdin.readline().strip() for i in range(n)]
words = sorted(list(set(w)))
words.sort(key=len)
for word in words:
print(word)
제일 먼저 input()을 당연하게 사용했는데, input()은 실행시간이 너무 오래 걸렸다🥲 그래서 sys.stdin.readline()을 사용했다.
sys모듈을 활용한 정수 입력
여기서 n은 입력 받은 단어의 개수를 의미한다. 간단하게 n = int(input())으로 받아도 무관하다.
words 리스트
n의 단어를 입력받아 리스트로 저장하는 과정으로, 단어를 입력받은 후 strip()함수를 통해 양쪽 공백을 제거하여 담아 준다. sys.stdin.readline()은 \n을 포함하는 입력이기 때문에 strip()의 과정이 필요하다.
sorted & sort
입력받은 단어들 중 중복은 하나만 남기고 삭제해주어야 한다. 따라서 중복을 허용하지 않는 set을 이용해 중복을 없애주고 다시 list에 담아준다. 그 후 sorted()를 통해 사전순(오름차순)으로 먼저 리스트를 정렬해 준다. 이때, sorted()는 반드시 변수에 담아주어야 정렬이 적용되기 때문에 유의하여야 한다. 마지막으로 sort()를 key=len으로 지정하여 단어의 길이 순으로 정렬해준다. 다음과 같은 순서로 적용해주면, 단어의 길이를 우선순위로 그리고 길이가 같을 경우 사전순으로 나열된 리스트를 만들 수 있다.
for문
리스트 안에 정렬된 후 담겨있는 단어들을 차례대로 print()해준다.
반복문으로 여러줄을 입력받는 상황에서는 시간초과가 발생하지 않게 하기 위해 sys.stdin.readline()을 사용한다. 이 문제의 경우 문자열 n줄을 입력받아 리스트로 저장해주어야 하기 떄문에 다음과 같이 작성한다.
import sys
n = int(sys.stdin.readline())
words = [sys.stdin.readline().strip() for i in range(n)]