본문 바로가기

Computer Science/알고리즘

[파이썬 알고리즘 인터뷰] 3. 가장 흔한 단어

https://github.com/onlybooks/algorithm-interview

1. 문제: 리트코드 819. Most Common Word

금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라. 대소문자 구분은 하지 않는다.

2. 내 코드

def mostCommonWord(self, paragraph, banned):

    #전처리
    paragraph = paragraph.lower()
    paragraph = re.sub('["!?\',;.".]', ' ', paragraph)

    #단어 개수 세기
    dict = {}
    for word in paragraph.split():
        if word in dict.keys():
            dict[word] += 1
        elif word not in banned:
            dict[word] = 1

    #정렬하기
    sorted_dict = sorted(dict.items(), key = lambda item: item[1], reverse = True)
    print(sorted_dict)

    return sorted_dict[0][0]

3. 정답

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]

4. 배운 점

1) python 정규표현식 사용법

re.sub(바꾸기 전 패턴, 바꾼 뒤 패턴, 문자열) -> return 바꾼 뒤 문자열

 

2)collections 모듈의 counter class 사용

counter class: 개수를 편하게 셀 수 있도록 도와주는 클래스, 딕셔너리 리턴

most_common(n) 메소드: counter에서 가장 많이 사용된 n개의 단어를 리턴