아래는 문제와 링크입니다.
코드를 먼저 보고 살펴보겠습니다.
import sys
from collections import Counter
input = sys.stdin.readline
N, M = map(int, input().split())
words = [word.strip() for _ in range(N) if len(word := input().strip()) >= M]
word_counts = Counter(words)
result = sorted(word_counts, key=lambda x: (-word_counts[x], -len(x), x))
print(*result, sep="\n")
일단 이 코드에서 얻을 부분은 아래와 같습니다.
1. 바다코끼리 연산자(할당 표현식 연산자) 사용
- 'if len(word := input().srtip()) >= M'은 파이썬 3.8에 새롭게 추가된 연산자입니다. 한 번 사용해 보았습니다.
- 이 연산자의 주요 기능은 표현식 내에서 변수에 값을 할당이 가능하다는 겁니다. 예를 들어:
if (x := len([1, 2, 3] > 2:
print(f"리스트의 길이는 {x}입니다") #리스트의 길이는 3입니다.
이런 사용이 가능합니다.
2. Counter 클래스 사용
- Counter 클래스를 사용해서 단어 빈도를 계산했습니다. 이로 인해 코드가 간결해지고 더 파이썬스러워졌습니다.
word_counts = Counter(words)
3. 리스트 컴프리헨션과 조건문 결합
- 입력받는 단어를 필터링하는 부분을 한 줄로 처리했습니다.
words = [word.strip() for _ in range(N) if len(word := input().strip()) >= M]
4. 정렬 조건의 간결한 표현
- 람다를 통해 정렬 조건을 한 번에 처리했습니다.
key=lambda x: (-word_counts[x], -len(x), x)
'백준 문제풀이' 카테고리의 다른 글
[백준] 2231번 분해합 - Python(1편) (0) | 2024.12.18 |
---|---|
[백준] 7795번 먹을 것인가 먹힐 것인가 - Python(1편) (0) | 2024.12.16 |
[백준] 1449번 수리공 항승 - Python(1편) (0) | 2024.12.14 |
[백준] 11652번 카드 - Python(1편) (2) | 2024.12.13 |
[백준] 1940번 주몽 - Python(1편) (0) | 2024.12.12 |