문제
https://www.acmicpc.net/problem/1181
알파벳 소문자로 이루어진 임의의 개수의 단어를 입력받아, 아래와 같은 기준으로 정렬하는 코드를 작성하라.
1. 길이가 짧은 것부터
2. 같은 길이의 단어는 사전 순
같은 단어가 여러 번 입력된 경우, 한 번만 출력한다.
풀이
내 풀이
1. 단어의 수만큼 단어를 입력받아, set으로 저장한다. (중복 제거)
2. set을 list로 형 변환한 후, 사전 순으로 정렬한다.
3. 길이를 조건으로 하여 정렬한다.
import sys
n = int(sys.stdin.readline())
l = set(sys.stdin.readline()[:-1] for _ in range(n))
l = sorted(list(l))
l = sorted(l, key=len)
print("\n".join(x for x in l))
정렬하는 순서를 변경하면 틀린다.
Lamda 함수 사용
리스트 정렬 시 Lambda 함수를 이용하여 여러 개의 정렬 조건을 줄 수 있다. 우선되는 조건부터 나열한다.
import sys
n = int(sys.stdin.readline())
l = set(sys.stdin.readline()[:-1] for _ in range(n))
l = sorted(list(l), key=lambda x: (len(x), x))
print("\n".join(x for x in l))