문제
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
▶️ 입력 조건
- 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
▶️ 출력 조건
- 조건에 따라 정렬하여 단어들을 출력한다.
풀이
어떻게 문제를 해결할까 고민 하던 중 구글링을 통해 sort 메소드는 정렬 기준을 두가지 설정할 수 있다는 것을 알게 되었다.
정확히 말해서 원래 알고는 있었는데 lamda등을 통해 함수를 인자로 줄 수 있는지는 몰랐음...
따라서 sort 함수에 lamda를 통해 두가지 기준을 인자로 넘겨주는 것으로 문제를 간단하게 해결했다.
import sys
n = int(sys.stdin.readline())
words = []
for _ in range(n):
word = sys.stdin.readline().strip()
if not word in words:
words.append(word)
words.sort(key=lambda x: (len(x), x))
sys.stdout.write('\n'.join(words))
'Algorithm > Problem Solving' 카테고리의 다른 글
[Beakjoon] 1764: 듣보잡 - python (0) | 2025.02.12 |
---|---|
[Beakjoon] 11723: 집합 - python (0) | 2025.02.12 |
[Beakjoon] 2775: 부녀회장이 될테야 - python (0) | 2025.02.07 |
[Beakjoon] 2164: 카드 2 - python (0) | 2025.02.07 |
[Beakjoon] 10816: 숫자 카드 2 - python (0) | 2025.02.05 |