문제 링크

<aside> 💡 자료 구조/해시를 사용한 집합과 맵/정렬/문자열/트리를 사용한 집합과 맵

</aside>

Memory 151360KB Time 640ms Code Length 309B

from collections import Counter

N, M = map(int, input().split())
words = [input().strip() for _ in range(N)]
words = [word for word in words if len(word) >= M]
word_counter = Counter(words)

words = sorted(word_counter.items(), key=lambda x: (-x[1], -len(x[0]), x[0]))

for word in words:
    print(word[0])

먼저, collections 모듈의 Counter 클래스를 import한다.

다음으로, 사용자로부터 두 개의 정수 N과 M을 입력받는다.

그 후, 사용자로부터 N개의 단어를 입력받는다. 이때, 각 단어의 앞뒤 공백을 제거한다.

입력받은 단어들 중에서 길이가 M 이상인 단어들만 선택하여 새로운 리스트를 만든다.

이렇게 만들어진 리스트를 Counter 클래스를 이용하여 각 단어의 등장 횟수를 센다.

그 후, 단어의 등장 횟수를 내림차순으로, 단어의 길이를 내림차순으로, 단어 자체를 오름차순으로 정렬한다.

마지막으로, 정렬된 단어들을 순서대로 출력한다.