https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
문제
알파벳 소문자로 이루어진 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
출처
- 문제를 만든 사람: author5
n = int(input())
nums = []
for i in range(n):
num = input()
nums.append(num)
nums = set(nums)
nums = list(nums)
nums.sort()
nums.sort(key=len)
for j in range(len(nums)):
print(nums[j])
중복을 먼저 제거해주기 위해서 set으로 바꾼 뒤 다시 리스트로 변환해서 정렬을 해줬다.
간단하게 한 줄로 list(set(nums))라고 할 수도 있다.
sort()를 사용해 사전순으로 정렬한 뒤, 정렬한 리스트에서 길이순으로 정렬해줬는데
처음에는 set()으로 변환해서 중복을 제거하는 과정을 뒷부분에 넣었더니 출력하는 부분에서 오류가 나거나
set으로 변환한 뒤 리스트의 sort()를 사용하려니 오류가 났었다.
set과 list의 속성을 고려해서 정렬하는 순서를 잘 맞추는게 중요했다.
'백준 > Python' 카테고리의 다른 글
[백준] 10816: 숫자 카드2_실버4 (Python) (0) | 2023.08.20 |
---|---|
[백준] 2751번: 수 정렬하기 2_실버5 (Python) (0) | 2023.08.20 |
[백준] 5800번: 성적 통계_실버5 (Python) (0) | 2023.08.16 |
[백준] 4949번: 균형잡힌 세상_실버4 (Python) (0) | 2023.08.15 |
[백준] 5430번: AC_골드5 (Python) (0) | 2023.08.15 |