https://www.acmicpc.net/problem/20920
문제핵심
단어를 여러 개 입력받은 후 3가지 조건으로 정렬을 하면 되는 문제이다.
1. 단어의 빈도수
2. 단어의 길이
3. 단어의 알파벳 사전순서
문제에서 다중조건의 정렬이 있다면 dictionary와 lambda를 이용해서 풀면 효과적이라는 것을 생각하자!
코드
import sys
input = sys.stdin.readline
N, M = map(int, input().split())
d = {}
for _ in range(N):
word = input().rstrip()
if len(word) < M:
continue
if word in d:
d[word] += 1
else:
d[word] = 1
d = sorted(d.items(), key = lambda x : (-x[1], -len(x[0]), x[0]))
for i in d:
print(i[0])
여기서 x[1]은 dic에서 value인 단어빈도수이며, x[0]은 key인 단어 그 자체이다.
따라서
-x[1] : 단어 빈도수 순서 정렬 (내림차순)
-len(x[0]) : 단어 길이 순서 정렬 (내림차순)
x[0] : 사전 순서 정렬 (오름차순)
d = sorted(d.items(), key = lambda x : (-x[1], -len(x[0]), x[0]))
728x90
'파이썬알고리즘' 카테고리의 다른 글
백준 2470 두 용액 (파이썬) (1) | 2024.08.28 |
---|---|
백준 1931 회의실 배정 (파이썬) (0) | 2024.08.27 |
백준 23971 ZOAC 4 파이썬 (0) | 2024.08.26 |
백준 10815 파이썬 (이진탐색, Binary Search) (1) | 2024.06.14 |
백준 2805 파이썬 (0) | 2023.12.21 |