알고리즘 문제풀이_Leet Code #819
문제 설명
문제링크
https://leetcode.com/problems/most-common-word/submissions/
문제해설

- 문자열
paragraph와 리스트banned두개의 인자가 주어진다. paragraph를 단어별로 나눈 후banned안에 있는 단어를 뺀 것 중 가장 많은 빈도로 사용된 단어를 반환해야 한다.- 문장은 영문자, 공백,
"!?',;."의 특수문자가 포함될 수 있다. banned에는 소문자만 들어있다.- 대소문자를 구분하지 않는다.
 
문제 풀이
풀이과정
- 문장을 깔끔하게 만든다.
- 특수문자를 공백으로 바꾸고
 - 공백을 기준으로 단어들의 리스트로 나눈다.
 
 collections모듈의Counter가 제공하는most_common()메서드를 활용해 가장 빈도가 높은 단어를 뽑는다.- 뽑은 단어를 반환한다.
 
나의풀이
from collections import Counter
import re
        
class Solution:
    def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
    	# 특수문자 <-> 공백으로 엮는 테이블 생성
        word_table = str.maketrans("!?',;.", "      ")
        # 소문자 처리한 paragraph를 위에서 만든 테이블로 번역(?) -> 특수문자가 공백으로 변함
        cleand_word = paragraph.lower().translate(word_table)
        # 단어별로 나누기
        word_list = cleand_word.split()
        
        # Counter 객체에 담아, 가장 인기 많은 Count의 (0번인덱스) 단어 (0번인덱스) 를 반환한다.
        return Counter([word for word in word_list if word not in banned]).most_common()[0][0]
- 정규표현식보다는 
maketrans를 사용해서 좀 더 직관적이게 문자열을 처리했다. - 정규표현식을 사용하려면 
cleand_wrod = re.sub(r'[^\w]', ' ', paragraph.lower())이렇게 처리할 수도 있다.\w는 단어를 뜻하고^는 반대의 값을 뜻하기 때문에, 단어가 아닌 모든 것을' '로 (즉, 공백으로) 바꾸겠다는 뜻이다. - 무튼 정규표현식을 안써도 처리가 되는것은 굳이 안쓰고 처리하는게 더 직관적이고 쉽고 빠를 수 있기 때문에 정규식을 쓰지 않았는데, 익혀두긴 해야할 것 같다.
 Counter나 List Comprehension은 따로 설명하지 않겠다!!
Author And Source
이 문제에 관하여(알고리즘 문제풀이_Leet Code #819), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ddhyun93/알고리즘-문제풀이Leet-Code-819저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)