파이썬 알고리즘 인터뷰 6장 4번 (리트코드 819)

Kim Yongbin·2023년 8월 12일
0

코딩테스트

목록 보기
4/162

Problem

LeetCode - The World's Leading Online Programming Learning Platform

문제 요약

  • 주어진 문자열에서 banned 단어를 제외한 단어 중 가장 많이 나온 단어를 찾아라
  • 모두 소문자로 생각.

Solution

import re
from typing import List
from collections import Counter

class Solution:
    def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
        paragraph_alphanumeric = re.sub(r"[^0-9a-zA-Z\s]", " ", paragraph.lower())
        exclude_paragraph = [word for word in paragraph_alphanumeric.split() if word not in banned]
        return Counter(exclude_paragraph).most_common()[0][0]
  • re.sub(r"[^0-9a-zA-Z\s]", " ", paragraph.lower())
    • 0-9: 숫자

    • a-z: 알파벳 소문자

    • A-Z: 알파벳 대문자

    • \s: white space (spaces, tabs, line break)

    • ^: not

      ⇒ paragraph.lower()에서 숫자, 알파벳, white space를 제외한 모든 단어들 제거 (특수문자 제거)

  • Counter(exclude_paragraph).most_common()[0][0]
    • Counter: 문자열 개수를 세주는 collection 모듈
    • most_common(): 가장 많이 나온 단어부터 List[Tuple(str, int)] 의 형태로 리턴해준다.

Result

  • most_common(): 단어 모두 리스트업 했을 때
  • most_common(1)하나만 뽑았을 때

=> 유의미한 차이는 없었다!

Reference

https://regexr.com/

https://docs.python.org/3/library/collections.html#counter-objects

profile
반박 시 여러분의 말이 맞습니다.

0개의 댓글