Programming/python
[Daily 코테] 백준 1181번: 단어 정렬
mariej
2023. 9. 15. 19:25
n = int(input())
words = set([input() for _ in range(n)])
words = sorted(list(words))
words = sorted(words, key=lambda x: len(x))
for i in range(len(words)):
print(words[i])
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
First Try
n = int(input())
words = [input() for _ in range(n)]
words = sorted(words)
words = set(sorted(words, key=lambda x: len(x)))
for i in range(len(words)):
print(words[i])
입력받을 단어의 개수를 변수 n에 저장하고, words라는 리스트에 n번 반복하여 단어를 입력받는다.
문제에서 제시한 정렬 기준은 첫번째 우선 순위가 문자의 길이였고, 두번째 우선 순위는 문자의 알파벳 순서였다.
즉, 문자들을 문자의 length 순서대로 모두 정렬한 후, 정렬된 리스트에서 길이가 같은 문자들을 알파벳 순서대로 또 정렬해주면 된다.
이때 위 코드에서 알파벳 순서대로 먼저 정렬한 이유는 python 내장 함수 sorted()의 특성 때문이다.
세번째 줄과 네번째 줄을 바꾸면 에러가 발생한다.
sorted()는 Tim sort라는 정렬 방식을 사용한다. 필자도 문제를 풀면서 확실한 원리를 잘 알지 못하여 Tim sort에 대해 찾아봤다.
https://www.youtube.com/watch?v=2pjUsuHTqHc
⚪이슈 원인
set은 인덱스가 없다. 마지막 for문에서 set의 인덱스를 이용해서 단어를 출력하려다 에러가 발생했다.
Second Try🎉
n = int(input())
words = set([input() for _ in range(n)])
words = sorted(list(words))
words = sorted(words, key=lambda x: len(x))
for i in range(len(words)):
print(words[i])