개발새발개발

백준 1181 단어정렬 실버5 (sort)

birdsfoot 2024. 12. 31.

문제 설명

  • 알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램
  • 중복된 단어는 하나만 남기고 제거
  1. 길이가 짧은 것부터
  2. 길이가 같으면 사전 순으로

 

입력값

  1. 단어의 개수 N
  2. ~N : 단어(길이 < 50)
13
but
i
wont
hesitate
no
more
no
more
it
cannot
wait
im
yours

 

출력값

  • 조건에 따라 단어들 출력
i
im
it
no
but
more
wait
wont
yours
cannot
hesitate

 


 

정답 코드

# 114312KB, 152ms(PyPy3)

N = int(input())


sentence = set()            # set으로 중복 제거
for _ in range(N) :
    word = input()
    sentence.add(word)


sentence = sorted(sentence)             # 사전순 정렬
sentence.sort(key=lambda x : len(x))    # 길이순 정렬
# sentence.sort(key=len) 로 해도 됨!


for word in sentence :
    print(word)

 

 

  • sort를 사용하면 기본적으로 사전순 정렬이 됨
  • lambda를 사용해 길이순 정렬을 했으나, sentence.sort(key=len)으로 해도 같은 결과가 나옴

 

다른 풀이

# 113368KB, 140ms

N = int(input())

temp = [[] for _ in range(50)]      # 단어 길이 50 이하
for _ in range(N) :
    word = input()
    temp[len(word)-1].append(word)  # 길이순 입력

# 사전순 정렬
for words in temp :
    test = ''                       # 중복 체크
    if words :                      # 값이 있을 때 확인
        for word in sorted(words) :
            if word != test :
                print(word)
                test = word
  • 입력받을 때 단어 길이 인덱스로 입력받은 뒤 그 안에서 정렬
  • 하나씩 값을 빼내어 중복 확인을 하고 출력하는 형태
  • 시간과 메모리 측면에서 조금 더 효율적임

 

댓글