본문 바로가기

프로그래밍/BOJ_Python 목표는 Diamond

[1181 | python] 단어 정렬

[1181 | python] 단어 정렬

 

🎉조건

알파벳 소문자로 이루어진 N개의 단어가 들어오면 정렬하는 프로그램을 작성하기

1. 길이가 짧은 단어 우선

2. 길이가 같은 경우 사전 순으로(abc...)

단 중복된 단어는 제거

 

예시

 

 


🎉접근방식

먼저 N만큼 단어를 입력받고 리스트에 저장

set을 통해 중복 제거

길이에 따라 정렬. 이때 길이가 같은 경우 알파벳순으로 정렬

정리한 리스트 리턴

 


🎉 Solution

# 1181
N = int(input())
word_list = []

for _ in range(N):
    word = input()
    word_list.append(word)

word_list = list(set(word_list)) #1
word_list.sort() #2
word_list.sort(key=len) #3

for i in word_list:
    print(i)

 

#1 : set()의 중복을 허용하지 않는 성질을 이용해 리스트 내 중복값을 제거한다.

#2 : sort()로 영어사전 순으로 정렬한다.

#3 : sort(key=len)으로 길이순으로 정렬한다. 이때 sort() 메서드는 리스트를 정렬한 후 None을 반환하고, 원래 리스트를 변경하므로 word_list에 재할당할 필요가 없다.

 

 

🎉 other Solution

좀 더 효율적인 코드를 찾아보았다. input()보다 1/10 수준으로 빠르다고 한다.

import sys
n = int(sys.stdin.readline())
lst = []

for i in range(n):
	lst.append(sys.stdin.readline().strip())

lst = list(set(lst))
lst.sort()
lst.sort(key=len)

for i in lst:
	print(i)

출처

 

[Python / 파이썬] 백준 1181번

백준 1181번 문제 풀이

velog.io