본문 바로가기
백준 문제풀이

[백준] 20920번 영단어 암기는 외로워 - Python(1편)

by arctis7p 2024. 12. 15.

아래는 문제와 링크입니다.

더보기
백준 20920번 영단어 암기는 괴로워 문제입니다. 클릭하면 링크로 넘어갑니다.

 

코드를 먼저 보고 살펴보겠습니다.

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)

 

 

문제 결과입니다.