728x90
문제는 더보기!
더보기
문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다. 단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.
예제 입력 1 복사
13 but i wont hesitate no more no more it cannot wait im yours
예제 출력 1 복사
i im it no but more wait wont yours cannot hesitate
저번 문제에서 배운 sort()함수의 key lambda기능이 먼저 떠올랐는데, x[1]로하면 리스트의 두번째 값을 기준으로 작동하는게 생각나서 len(x)를 넣으면 길이대로 정렬하지 않을까? 란 생각에 해보았는데 잘 작동하였다.
그렇다면 같은 길이의 문자를 어떻게정렬할지만 남은 문제가 된다. if문으로 각각 길이를 조사하고 나누는 방법도 있겠지만, 길이별로 정렬을 하기 전에 알파벳 순서대로 정렬을 해두면 글자정렬로 되어도 그안들은 정렬되어 있지않을까?
라는생각이 들어서 적용해 보았더니 잘 작동하였다.
import sys
n = int(sys.stdin.readline())
lst = list(set([sys.stdin.readline().strip('\n') for _ in range(n)]))
lst.sort()
lst.sort(key = lambda x : len(x) )
print('\n'.join(lst))
즉, 리스트를 받아오는데, 중복제거를 위해서 set을 씌운 상태로 리스트를 받아왔다.
그 이후, 먼저 lst값을 알파벳순으로 정렬을 한 후에, 단어길이 순으로 정렬을 하였다.
중복 제거 -> 알파벳순 정렬 -> 글자순 정렬 순서로 진행한 셈이다.
이번 문제는 특히 파이썬스럽게 잘 풀었다는 생각이 들어서 뿌듯했다.
728x90
'Python > 백준' 카테고리의 다른 글
18870_좌표 압축 (0) | 2021.12.08 |
---|---|
10814_나이순 정렬 (0) | 2021.12.07 |
11651_좌표 정렬하기2 (0) | 2021.12.04 |
11650_좌표 정렬하기 (0) | 2021.12.03 |
1427_소트인사이드 (0) | 2021.12.03 |