정규식, collections.Counter [리트코드] 819. Most Common Word

이영준·2022년 6월 17일
0

알고리즘 문제풀이

목록 보기
9/24

https://leetcode.com/problems/most-common-word/

멍청하면 몸이 고생한다.

class Solution:
    def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
        new_paragraph = []
        word = ""
        paragraph = paragraph.lower()
        for j in range(len(paragraph)):
            if paragraph[j].isalpha():
                word = word + paragraph[j]
                if j == len(paragraph)-1:
                    new_paragraph.append(word)
            else:
                if word != "":
                    new_paragraph.append(word)
                word=""

        paragraph = new_paragraph
        for a in banned:
            a.lower()
        

        if banned:
            for words in banned:
                while words in paragraph:
                    paragraph.remove(words)
        max_count = 0
        for words in paragraph:
            if max_count <= paragraph.count(words):
                max_count = paragraph.count(words)
                max_word = words
        return (max_word)

처음 제출한 답안이다. paragraph리스트를 정리하기 위해서 무자겅 덤볐다. paragraph 스트링을 소문자화 하고, 각 글자마다 알파벳인 경우에 word 에 저장해서 나오는 word들을 새로운 리스트에 저장하고, 다시 그 리스트를 paragraph에 넣었다.

banned에 있는 단어들 각각에 대하여 모두 remove함수를 적용하고, 최빈출 단어도 각각의 count값을 구하여 max 값을 도출시킨 수고를 하였다.

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]

re 모듈과 collection모듈에 대한 공부가 필요할 듯 하다.

정규식에서 \w는 단어 문자를 뜻하며, ^는 not을 뜻한다. 따라서 단어문자가 아닌 모든 문자를 공백으로 치환해준다.

또한 collections.Counter(words)는 words 리스트를 나온 횟수와, 그 단어를 딕셔너리 형태로 불러준다. 여기서 가장 많이 나온 단어의 첫번째 인덱스를 리턴해준다.

profile
컴퓨터와 교육 그사이 어딘가

0개의 댓글