https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
https://github.com/stellaluminary/Baekjoon
GitHub - stellaluminary/Baekjoon
Contribute to stellaluminary/Baekjoon development by creating an account on GitHub.
github.com
초기 시도
우선 단어들에 대한 입력을 받아 길이별로 list를 넣는다.
이후 1개 이상의 리스트일 때 중복 없게 하기위한 set과 더불어 사전 순을 위한 sort를 사용한다.
import sys
input = sys.stdin.readline
n = int(input())
l = [input().rstrip() for i in range(n)]
t = [[] for _ in range(51)]
for i in range(len(l)):
t[len(l[i])].append(l[i])
for i in range(len(t)):
if len(t[i]) == 0:
continue
elif len(t[i]) == 1:
print(t[i][0])
else:
t[i] = list(set(t[i]))
t[i].sort()
for j in range(len(t[i])):
print(t[i][j])
초기 sort를 통해 사전순으로 정렬한다.
이후 key=len을 통해 재정렬을 진행함으로써 길이별로 정렬을 진행
import sys
input = sys.stdin.readline
n = int(input())
l = [input().rstrip() for i in range(n)]
l = list(set(l))
l.sort()
l.sort(key=len)
for i in l:
print(i)
길이에 대한 정보와 함께 단어를 함께 list에 저장하고 sort를 진행하면 순차적으로 정렬되는 것을 확인할 수 있다.
이를 통한 결과를 도출한다.
import sys
input = sys.stdin.readline
n = int(input())
l = [input().rstrip() for i in range(n)]
l = list(set(l))
t = []
for i in l:
t.append((len(i), i))
t.sort()
for length, word in t:
print(word)