문제
알파벳 소문자로 이루어진 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
정답 코드
# 사용자로부터 정수 N을 입력받음
N = int(input())
# 길이가 N인 리스트 list1을 0으로 초기화
list1 = [0] * N
# N개의 문자열을 입력받아 list1에 저장
for i in range(N):
a = input()
list1[i] = a
# list1의 중복을 제거하기 위해 집합(set)으로 변환
my_set = set(list1)
# 집합을 다시 리스트로 변환
li = list(my_set)
# 문자열의 길이를 기준으로 정렬
li.sort(key=len)
# 길이가 같은 문자열끼리 사전순으로 정렬
for i in range(len(li) - 1):
for j in range(len(li) - 1 - i):
# 길이가 같은 문자열을 비교
if len(li[j]) == len(li[j + 1]):
# 사전순으로 앞에 있어야 하는 경우 위치를 바꿈
if li[j] > li[j + 1]:
li[j], li[j + 1] = li[j + 1], li[j]
# 정렬된 문자열들을 출력
for i in range(len(li)):
print(li[i])
'백준' 카테고리의 다른 글
2024.6.27 백준(Python) 4344 평균은 넘겠지 (0) | 2024.06.27 |
---|---|
2024.6.27 백준(Python) 1924 2007년 (0) | 2024.06.27 |
2024.5.16 백준(Python) 1236 성지키기 (0) | 2024.05.16 |
2024.5.16 백준(Python) 1110 더하기 사이클 (0) | 2024.05.16 |
2024.4.9 백준(Python) 2751 수 정렬하기 2 (0) | 2024.04.09 |