알고리즘 문제풀이_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.)