(LeetCode)819. 가장 흔한 단어

문제

Most Common Word - LeetCode

아이디어

  • 리스트 컴프리헨션과 딕셔너리의 Count객체를 활용한 풀이

코드

class Solution:
    def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
        # \w는 단어 문자를 뜻하며, ^는 not을 뜻함 [^\w]는 문자가 아닌 모든항목을 공백으로 치환
				words = [word for word in re.sub('[^\w]', ' ', paragraph).lower().split()
                    if word not in banned]
        counts = collections.Counter(words)
        return counts.most_common(1)[0][0]

배운점

  • 리스트 컴프리헨션은 가독성이 많이 떨어지고 실제 구현시에도 쉽게 코드를 작성하는것이 어려운것같다.
  • 아래 코드는 paragraph에서 문자(a-z)를 제외한 나머지를 공백으로 치환하고, 문자열을 소문자로 치환하고, 공백을 기준으로 단어를 나눠서 words라는 리스트를 생성하는데 이때 각 단어에 해당하는 word는 banned 리스트에 포함유무를 확인하여 banned에 있는단어는 words에 추가하지않는다.
words = [word for word in re.sub('[^\w]', ' ', paragraph).lower().split()
                    if word not in banned]
  • most_common(1)은 counter에서 가장 흔한단어로 값은 [(‘ball’, 2)]가 되기때문에 [0][0]으로 추출