“파이썬 알고리즘 인터뷰” + https://leetcode.com/problems/most-common-word/

주어진 문자열에서 가장 많이 사용된 단어를 고르는 문제다. 그냥 만들자면, 불필요한 문자를 정리하고 단어들을 배열로 변환하고 단어마다 등장 회수를 계산하면 되지만 여기서 파이썬 다운 해결방법이라 함은 리스트 컴프리헨션(List Comprehension)과 카운터 객체를 사용하는 것을 말한다.


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]

        # 1. using defaultdict
        # counts = collections.defaultdict(int)
        # for word in words:
        #     counts[word] += 1
        # return max(counts, key=counts.get)

        # 2. using Counter
        counts = collections.Counter(words)
        return counts.most_common(1)[0][0]

데이터 클렌징과 banned에 포함되지 않는 단어를 제외하는 처리까지 한 구문에서 작성했다. 너무 길어져도 가독성이 떨어지지만 확실히 코드가 심플해진다.

#1에서 정수형의 defaultdict를 사용해 단어의 횟수를 0으로 초기화하는 코드를 적지 않아도 += 를 쓸 수 있다는 것, #2에서 카운터 객체를 사용해 우리가 원하는 형태의 딕셔너리를 바로 만들어 낼 수 있는 것도 파이썬 다운 방법이다.