just inside

[백준] Silver 5. 1181 - 단어 정렬 python 본문

coding test/구현

[백준] Silver 5. 1181 - 단어 정렬 python

방울도마도 2024. 7. 9. 09:49
728x90

문제 링크

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


문제 설명

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

  1. 길이가 짧은 것부터
  2. 길이가 같으면 사전 순으로

단, 중복된 단어는 하나만 남기고 제거해야 한다.

 

입력

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

 

출력

조건에 따라 정렬하여 단어들을 출력한다.


제출 코드

import sys

input = sys.stdin.readline

n = int(input().rstrip())
words = []

for _ in range(n):
    words.append(input().rstrip())

words = sorted(list(set(words)), key=lambda x: (len(x), x))

for i in words:
    print(i)

 

풀이

  • 중복되는 단어는 제거해줘야 하므로 list로 입력 -> set 자료형으로 변환 -> 정렬 위해 list 자료형으로 변환
  • key를 이용해 단어 길이 순, 사전 순의 순서로 정렬해준다.
  • key를 두 개 이상 사용하므로 lambda 함수를 활용한다.

 

알아둘 사항

  • sorted 함수의 key 옵션 사용시 다양한 기준으로 정렬 가능하다.
  • key=lambda x:function(x) 사용하면 두 개 이상의 기준을 순차적으로 적용해서 정렬 가능하다. 두 개 이상의 컬럼을 기준으로 정렬도 가능.
  • 리스트 원소 한줄씩 출력하기 위해 아래와 같은 코드 사용 가능
print(*words, sep='\n')
728x90