Algorithm/백준

[BOJ] 1181 - 단어 정렬

비번변경 2022. 2. 16. 19:47

문제

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))