[백준 1181] 단어 정렬 / 파이썬

권한·2025년 12월 24일

BOJ

목록 보기
16/40

N개의 단어가 들어오면 1. 길이가 짧은 것부터 2. 길이가 같다면 사전 순으로 3. 중복 단어는 하나만 살리고 제거 하여 출력하는 문제이다.

  1. 입력케이스가 많으므로 sys.stdin.readline()을 사용해준다.
  2. 중복은 집합의 특성을 이용해 제거한다.
  3. 길이가 짧은것부터 정렬해준다.
import sys

words = [sys.stdin.readline().rstrip() for _ in range(int(input()))]
words = list(set(words))
for i in range(len(words) - 1):
    least = i
    for j in range(i, len(words)):
        if len(words[least]) > len(words[j]):
            words[least], words[j] = words[j], words[least]
        elif len(words[least]) == len(words[j]):
            if words[least] > words[j]:
                words[least], words[j] = words[j], words[least]

아뿔사 시간을 생각하지 못했다.

파이썬의 sort는 특정 키를 기준으로 정렬할 수 있다.
key = len sort의 옵션으로 쓰게 되면 길이를 기준으로 정렬한다.

길이 순 정렬 -> 사전 순 정렬을 하게되면 길이 순 정렬이 적용되지 않으므로
사전 순 정렬 후 길이 순으로 정렬해준다.

import sys

words = [sys.stdin.readline().rstrip() for _ in range(int(input()))]
words = list(set(words))
words.sort() #길이순으로 정렬하고 사전순 정렬하면 길이순이 적용되지 않음 -> 따라서 사전순으로 정렬하고 길이순으로 정렬
words.sort(key = len)
for w in words:
    print(w)
profile
티스토리로 옮김

0개의 댓글