본문 바로가기
백준(Python) 풀이

백준 1181번. 단어 정렬 (Python / 파이썬)

by yewonnie 2022. 4. 19.

문제

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

입력

첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.

출력

조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.

문제 풀이

알파벳 소문자로 이루어진 N개의 단어가 입력되면

길이가 짧은 것부터,

길이가 같으면 사전 순으로 

정렬해야 합니다.

 

이때, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력해야 합니다.

따라서, 입력 받은 단어들을 list에 삽입해준 뒤

중복을 제거해주기 위해 set() 함수를 이용합니다.

set() 함수는 집합 자료형으로 만들어주는 함수이며 중복을 허용하지 

않기 때문에 중복을 제거해주는 역할을 합니다.

set() 함수로 중복을 제거해준 뒤 다시 list 자료형으로 만들어줍니다.

 

그 후, 새로운 list에 각 단어와 그 단어의 길이를 저장합니다.

sort() 함수는 key를 이용할 수 있는데

만약, sort(key = lambda x: (x[0], x[1])을 이용하면

x[0]을 우선적으로 먼저 정렬한 뒤, x[1]을 기준으로 정렬합니다.

 

따라서, 길이가 짧은 것부터 우선으로 정렬한 뒤

길이가 같으면 사전 순으로 정렬하도록 해주었습니다.

list의 0번째 원소는 단어의 길이, 1번째 원소는 단어이므로

1번째 원소를 출력해주었습니다.


My Code

n = int(input()) # 단어의 개수

word = []
for _ in range(n):
    word.append(input()) # 단어를 list에 삽입

word = list(set(word)) # 중복을 제거

answer = []
for i in word:
    answer.append((len(i), i)) # 단어의 길이, 단어를 list에 삽입

# 단어의 길이를 우선적으로 정렬한 뒤, 사전 순으로 정렬
answer.sort(key = lambda x: (x[0], x[1])) 

for i in answer:
    print(i[1])  # 정렬된 결과 중 단어만 출력

 

 

 

 

댓글