[Python] 백준 알고리즘 온라인 저지 1181 단어 정렬
https://www.acmicpc.net/problem/1181
이 문제에서는 중복 없애는 것과 정렬의 순서에 대해서 이해하고 있다면 빠르게 풀 수 있는 문제였다.
코드
n = int(input())
words = [str(input()) for i in range(n)]
words = list(set(words))
words.sort()
words.sort(key=len)
for i in words:
print(i)
풀이
우선 입력값(n)을 받아 n번 단어들을 words라는 함수에 담아준다.
그 후에는 중복 값을 제거해야 하므로 set 내장 함수를 이용하여 제거했다. set한 words를 리스트에 담아 다시 선언하였다.
이제 정렬을 하면 되는데 여기서는 순서가 중요하다.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
문제에서 요구되는 내용은 위 두 가지이지만 파이썬의 정렬 방식에 대해 생각해보면 사전 순으로 정리한 뒤 짧은 것을 정렬해야 한다. 만약 짧은 것을 먼저 오도록 정렬하고 사전 순으로 정리한다면 다시 길이에 상관없이 A->B->C... 순으로 정리될 것이다.
사전 순으로 정렬하는 방법은 단순히 sort를 이용하고 길이에 상관없이 맨 앞글자의 알파벳 순서에 따라 정렬된다. 앞글자의 알파벳이 같다면 그다음 문자를 사전 순으로 정렬하게 된다.
사전 순으로 미리 정리한 뒤 길이에 따라 정렬한다면 이미 사전 순으로 정렬되어 있어 짧은 순으로 배치한다 하여도 조건을 만족하게 된다. 길이 순으로 정리하는 방법은 sort(key=len)을 이용하면 된다.
이제 정답이 담긴 리스트를 한 줄씩 출력하는 for문을 작성하면 풀이는 끝난다.
풀이 결과
'알고리즘' 카테고리의 다른 글
백준 18870번 좌표 압축 파이썬 풀이 (0) | 2022.01.30 |
---|---|
백준 10814번 나이순 정렬 파이썬 풀이 (0) | 2022.01.27 |
백준 11651번 좌표 정렬하기 2 파이썬 풀이 (0) | 2022.01.24 |
백준 11650번 좌표 정렬하기 파이썬 풀이 (0) | 2022.01.22 |
백준 1427번 소트인사이드 파이썬 풀이 (0) | 2022.01.21 |