[BOJ] 1181번 단어 정렬 / Python

sangjuneeeee·2024년 7월 26일

문제

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

풀이

집합은 중복을 허용하지 않지만, 순서를 보장하지 않으므로
입력을 집합으로 받아 중복을 제거하고,
집합에서는 sorted()를 이용할 수 없으므로 리스트로 변환하고,
key를 lamda x:(len(x), x))로 튜플로 반환하도록 하여 길이를 우선순위로 정렬하고 알파벳순으로 정렬되게 하였다.

코드

n = int(input())
a = set()
for i in range(n):
    a.add(input())
arr = sorted(list(a), key=lambda x:(len(x), x))
for word in arr:
    print(word)

다른 풀이 코드

import sys
input = sys.stdin.readline

N = int(input())
S = [set() for i in range(51)]

for i in range(N):
    s = input().strip()
    S[len(s)].add(s)

for i in range(51):
    if S[i]:
        print("\n".join(sorted(S[i])))

문제에서 문자열의 길이는 50을 넘지 않다고 하였으므로,
미리 51개의 길이 집합을 담은 배열을 만들어 2차원 배열처럼 사용하여 시간을 단축시킬 수 있다.

profile
지식 쌓아두기 블로그

0개의 댓글