https://leetcode.com/problems/most-common-word/submissions/
paragraph
와 리스트 banned
두개의 인자가 주어진다.paragraph
를 단어별로 나눈 후 banned
안에 있는 단어를 뺀 것 중 가장 많은 빈도로 사용된 단어를 반환해야 한다."!?',;."
의 특수문자가 포함될 수 있다.banned
에는 소문자만 들어있다.collections
모듈의 Counter
가 제공하는 most_common()
메서드를 활용해 가장 빈도가 높은 단어를 뽑는다.from collections import Counter
import re
class Solution:
def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
# 특수문자 <-> 공백으로 엮는 테이블 생성
word_table = str.maketrans("!?',;.", " ")
# 소문자 처리한 paragraph를 위에서 만든 테이블로 번역(?) -> 특수문자가 공백으로 변함
cleand_word = paragraph.lower().translate(word_table)
# 단어별로 나누기
word_list = cleand_word.split()
# Counter 객체에 담아, 가장 인기 많은 Count의 (0번인덱스) 단어 (0번인덱스) 를 반환한다.
return Counter([word for word in word_list if word not in banned]).most_common()[0][0]
maketrans
를 사용해서 좀 더 직관적이게 문자열을 처리했다.cleand_wrod = re.sub(r'[^\w]', ' ', paragraph.lower())
이렇게 처리할 수도 있다. \w
는 단어를 뜻하고 ^
는 반대의 값을 뜻하기 때문에, 단어가 아닌 모든 것을 ' '
로 (즉, 공백으로) 바꾸겠다는 뜻이다.Counter
나 List Comprehension은 따로 설명하지 않겠다!!