2025. 10. 15. 13:08 Baekjoon(Python)/단계별로 풀어보기(Python)

Baekjoon(Python)/단계별로 풀어보기(Python)

[백준][18단계 심화 2] 20920번 /영단어 암기는 괴로워 (파이썬/Python)

junslee 2025. 10. 15. 13:08

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 함수 : (-등장횟수, -단어길이, 단어자체)

반응형