BOJ 1181. 단어 정렬 (Python)

2021. 2. 10. 21:07Problem Solving/BOJ

BOJ 1181. 단어 정렬

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

 

1181번: 단어 정렬

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

www.acmicpc.net

풀이

파이썬의 내장함수 sorted()sort()를 사용하면 된다.
둘의 차이점은,

  • sorted() : 정렬한것을 리턴한다.
  • sort() : 원본이 정렬 된 것으로 바뀐다. None을 리턴한다.

 

주목 할 만한 문법은 keyreverse 파라미터의 사용이겠다.

  • key : 정렬 기준 정해줌
  • reverse : default는 True이며, True는 오름차순, False는 내림차순이다.

 

이때 key에 (첫번째 기준, 두번째 기준) 튜플을 넘겨주면 순서대로 기준이 적용되므로 이 문제에선 이렇게 사용하면 되겠다.


lambda 사용하면 쉽다.

 

소스코드

import sys

words = []

N = int(input())
for _ in range(N):
    words.append(sys.stdin.readline().rstrip())

# 정렬
result = sorted(set(words), key=lambda x:(len(x),x))

# 출력
for s in result: print(s)

반응형