Today
Total
Recent Posts
Link
반응형
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
관리 메뉴

아임'준

[BOJ / 파이썬] 1181: 단어 정렬 본문

문제풀이/BOJ

[BOJ / 파이썬] 1181: 단어 정렬

아임'준 2021. 10. 8. 10:08
반응형

백준 / BOJ / Python / 파이썬

문제 링크 : https://www.acmicpc.net/problem/1181

 

1181번: 단어 정렬

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

www.acmicpc.net

단계 : 정렬

알고리즘 분류 : 정렬

 

풀이:

t를 통해 입력받을 횟수를 저장한 후 입력한 단어들을 word라는 리스트에 저장해준다.

 

입력받은 단어들을 저장한 리스트에는 중복된 단어가 있을 수도 있다. 하지만 문제에서 중복된 단어는 출력할 때 한번만 출력하라 했으니 중복된 단어를 제거하기 위해 set를 사용한다. set() 함수를 통해 리스트에서 중복된 단어를 제거해준 후 sort 메소드를 쓰기 위해 다시 리스트로 만들어준다.

 

sort 메소드를 이용하여 지정한 기준에 따라 정렬이 되도록 한다. 문제에서 요구한 요건은 단어의 길이가 짧은 것부터, 단어의 길이가 같을 때는 사전순 이므로 key의 튜플에 넣어줄 요소는 먼저 단어의 길이인 len(x)와 그냥 단어 자체인 x를 순서대로 적어주면 되겠다.

 

코드

import sys

t = int(sys.stdin.readline())

word = []

for _ in range(t):
    word.append(sys.stdin.readline().rstrip())

word = list(set(word))  # 중복 제거
word.sort(key=lambda x: (len(x), x))  # 정렬하는 기준이 len으로 먼저 하고 같으면 x로 해라

print("\n".join(word))

Comments