본문 바로가기

프로그래머/Python

[Python] Leet Code 819 : Most Common Word

본 내용은 <파이썬 알고리즘 인터뷰>를 참고했습니다.

class Solution:
    def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:

        words = [word for word in re.sub(r'[^\w]', ' ', paragraph)
                .lower().split()
                if word not in banned]

        counts = collections.Counter(words)

        return counts.most_common(1)[0][0]

이 문제에서 배워야할 포인트

words = [word for word in re.sub(r'[^\w]', ' ', paragraph)
                .lower().split()
                if word not in banned]
  1. 정규표현식
  • 입력 값에는 대소문자가 섞여 있으며 쉼표 등 구두점이 존재한다.
  • 따라서 단어 문자를 제외하고는 필터링 작업이 필요하다.
  • 대괄호 안에서는 메타문자 역할을 하는 것은 오직 , ^, -, ] 뿐이다.
  • 캐릿(caret) ^ 문자가 여는 대괄호 바로 뒤에 있으면 문자가 반전된다.
    • 정규식에서 \w는 단어 문자를 뜻하며, ^는 not을 의미한다.
  • 따라서 위 정규식은 단어 문자가 아닌 모든 문자를 공백으로 치환하는 역할을 한다.
counts = collections.Counter(words)
return counts.most_common(1)[0][0]
  1. Counter
  • Counter 객체를 이용해 구현
  • words에서 가장 흔하게 등장하는 단어의 첫 번째 값을 most_common(1)으로 추출한다.
    • [('ball', 2)]가 되며, 이 값의 [0][0]을 추출해서 최종적으로 첫 번째 인덱스의 키를 추출하게 된다.