1. 문제 설명



2. 코드
import sys
from collections import Counter
input = sys.stdin.readline
N,M = map(int,input().split())
freq = Counter()
for _ in range(N):
w = input().strip()
if len(w) >= M:
freq[w] += 1
w_sorted = sorted(freq.keys(), key=lambda w: (-freq[w], -len(w), w))
print("\n".join(w_sorted))
3. 풀이 과정
M길이 이상의 단어를 세서 3가지 조건에 맞추어서 정렬한 후 출력하는 문제이다.
입력된 단어의 횟수를 카운트하기 위해 Counter 클래스를 받는다.
Counter()함수를 freq에 받고,
N번 반복하는 for문으로 w에 단어를 입력받는다.
길이 조건(M이상)을 만족하면 freq[w]에 1을 추가한다.
카운트가 끝나면 freq에서 단어들 (keys())만 조건 (등장횟수 내림차순, 길이 내림차순, 사전식 오름차순)을 추가해서 정렬시킨다.
줄바꿈("\n")을 join()함수로 추가해서 출력한다.
4. 자투리 개념
- Counter() 함수
- 해시 가능한 객체의 빈도를 세는데 특화된 딕셔너리 서브 클래스
- 내부적으로는 dict와 같지만, 존재하지 않는 키의 기본값이 0으로 취급되고, 빈도 연산에 유용한 메서드들이 추가되어 있다.
- 사용 예시 : a = Counter(a=3,b=1), c = Counter('mississippi') - sorted() 함수
w_sorted = sorted(freq.keys(), key=lambda w: (-freq[w], -len(w), w))
- key 함수 : (-등장횟수, -단어길이, 단어자체)
반응형
'Baekjoon(Python) > 단계별로 풀어보기(Python)' 카테고리의 다른 글
| [백준][19단계 재귀] 27433번 /팩토리얼 2 (파이썬/Python) (0) | 2025.10.17 |
|---|---|
| [백준][19단계 재귀] 10870번 /피보나치 수 5 (파이썬/Python) (0) | 2025.10.16 |
| [백준][18단계 심화 2] 2108번 /통계학 (파이썬/Python) (0) | 2025.10.10 |
| [백준][18단계 심화 2] 26069번 /붙임성 좋은 총총이 (파이썬/Python) (0) | 2025.10.10 |
| [백준][18단계 심화 2] 25192번 /인사성 밝은 곰곰이 (파이썬/Python) (0) | 2025.10.09 |