알고리즘/백준
[Python] 백준 파이썬 1181 단어 정렬
dding96
2022. 9. 17. 08:04
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
- 중복 단어 제거
- 길이 순 정렬 후 사전 순 정렬
이 두가지 과정으로 진행하면 됩니다.
import sys
n = int(input())
word_list = []
for _ in range(n):
word = sys.stdin.readline().strip()
word_len = len(word)
if [word_len, word] not in word_list:
word_list.append([word_len, word])
word_list.sort(key = lambda x : (x[0], x[1]))
for i in word_list:
print(i[1])
입력받은 단어와 단어의 길이를 리스트에 [길이, 단어] 형식으로 추가해줍니다.
sort(key = lambda) 를 이용해 길이 순으로 먼저 정렬 후 단어 사전 순으로 정렬 진행해줬습니다.
근데 이렇게 진행하면 정답이라고 나오긴 하는데 시간이 너무 오래걸려서
중복치 제거하는 방법중에 집합(set)을 활용하는 방법이 있기 때문에 그걸 이용해서 다시 한 번 풀었습니다.
import sys
read = sys.stdin.readline
n = int(read())
word_set = set()
for _ in range(n):
word_set.add(read().strip())
list = list(word_set)
list.sort(key=lambda x : (len(x), x))
for i in range(len(list)):
print(list[i])
처음엔 중복치가 들어가지 않게 word_set에 추가해주고
정렬을 해야하니까 다시 list로 바꿔서 정렬 했습니다.