동백 // 백준 파이썬 1181번 단어 정렬

2021. 11. 1. 16:59컴퓨터 사이언스/Algorithm

반응형
반응형

단어 정렬


시간 제한 메모리 제한 제출 정답 맞은 사람 정답 비율
2 초 256 MB 66537 27360 20368 40.353%

문제


알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.

길이가 짧은 것부터

길이가 같으면 사전 순으로

입력


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

출력


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

예제 입력 1


13 but i wont hesitate no more no more it cannot wait im yours

예제 출력 1


i im it no but more wait wont yours cannot hesitate

내 코드(틀린 코드)

N = int(input())

tmp = []

for i in range(N):
    alpha = input()
    # 단어 앞에 그 단어의 길이를 붙이므로, 길이순으로 sort되게 함
    lenword = str(len(alpha))+alpha
    tmp.append(lenword)

# 중복 문자를 제거해주고, 다시 list형으로 바꿔줌
result1= set(tmp)
tmp = list(result1)

tmp.sort()

for _ in tmp:
    # 문자의 맨 앞은 숫자이기에 2번째부터 출력해줌
    _ = _[1:]
    print(_)

 

정답 코드

n = int(input())
ans = []

for i in range(n):
    # 입력과 동시에 append 해줌
    ans.append(input())

# 중복 문자를 제거해주고, 다시 list형으로 바꿔줌 
temp = set(ans)
ans = list(temp)

# 알파벳 순서로 정렬해줌
ans.sort()

# 리스트 요소를 길이 순으로 정렬할 때는 sort 메소드에서 key=len
ans.sort(key = len)


for i in ans:
    print(i)
반응형