반응형
문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
입력
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
출력
조건에 따라 정렬하여 단어들을 출력한다.
단, 같은 단어가 여러 번 입력된 경우에는 한 번씩만 출력한다.
예제 입력13but i wont hesitate no more no more it cannot wait im yours |
예제 출력iim it no but more wait wont yours cannot hesitate |
풀이
입력받은 단어를 길이가 짧은 순으로, 길이가 같으면 사전 순으로 출력하는 문제이다.
우선, 같은 단어가 입력될 경우 한 번만 출력해야 된다는 조건 때문에
집합(set)에 단어들을 넣고, 이를 리스트로 변환하기로 했다.
이렇게 하면 별 다른 조치 없이 자동으로 중복이 제거된다.
그리고 문자열의 길이가 50이하이기 때문에
문자열의 길이대로 배열을 만들어주고, 입력받은 단어의 길이에 따라
해당 길이에 맞는 배열에 넣은 뒤 그 배열을 순서대로 정리해준 뒤 출력했다.
import sys
L = list({sys.stdin.readline().rstrip() for i in range(int(sys.stdin.readline()))})
L2 = [[] for i in range(100)]
# 50으로 했더니 index 에러가 발생해서
# 그냥 충분히 늘려주었다.
for i in L:
L2[len(i)].append(i)
# 해당 문자열의 길이별로 L2 배열에 저장해준다.
for i in L2:
i.sort()
for i in L2:
for j in i:
print(j)
반응형
'알고리즘 연습 > 정렬' 카테고리의 다른 글
[🥈2 / 백준 18870 / 파이썬] 좌표 압축 (0) | 2021.06.09 |
---|---|
[🥈5 / 백준 10814 / 파이썬] 나이순 정렬 (0) | 2021.06.08 |
[🥈5 / 백준 11651 / 파이썬] 좌표 정렬하기 2 (0) | 2021.06.08 |
[🥈5 / 백준 11650 / 파이썬] 좌표 정렬하기 (0) | 2021.06.08 |
[🥈5 / 백준 1427 / 파이썬] 소트인사이드 (0) | 2021.06.07 |