https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

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

www.acmicpc.net

 

import sys

n = int(sys.stdin.readline().strip()) #n = int(input())

dic = {}
for _ in range(n) :
    word = sys.stdin.readline().strip() #word = input()
    l = len(word)
    if l in dic :   dic[l].append(word) # 이미 딕셔너리에 존재할 경우
    else :          dic[l] = [word] # 딕셔너리에 해당 길이인 단어가 없을 경우

key_list = sorted(list(dic.keys())) # 길이 순 정렬
for key in key_list:
    for w in sorted(list(set(dic[key]))):  # 같은 길이인 단어들 중 중복 제거 후, 정렬
        print(w)

 

 

간단한 string 문제이기 때문에 속도를 높이기 위해 노력했다

dictionary 사용 / key 기준 정렬로 전체 단어들 정렬 피했다. 

그 결과 pypy 제출 답안중에서는 괜찮은 속도인 것 같다

그래도 더 괜찮은 코드가 있을것같은데 잔디 채우고싶어서 술먹고꾸역꾸역 푼거라서 내일...찾아봐야지....

+ Recent posts