Leetcode 819. Most Common Word - Python

2022. 5. 4. 21:00IT/Algorithm

반응형

Leetcode 819 문제 보기

 

문제 이해하기

문장 paragraph가 주어졌을 때, banned에 적힌 단어들을 제외하고 가장 많이 나타나는 단어를 찾아라.

정답 단어는 소문자로 출력하라.

 

아이디어 구상

문제에서 문장에 포함가능한 문장부호들이 주어졌다.

공백 포함 !?',;. 기호가 포함가능하다고 한다.

 

때문에 위 기호들을 제거하고 문장을 소문자로 치환한 후,

단어별로 쪼갠 후 banned의 단어들을 제외해준다면

가장 많이 출현하는 단어를 찾을 수 있을 것이다.

 

그러나 여기서는 좀 더 간명한 풀이 방법을 사용해보자.

바로 정규표현식을 이용한 방법이다.

 

By Mesotes

 

정규표현식은 문자열을 편리하게 다룰 수 있게 하는 방법이다. 특정한 조건의 문자를 검색하거나 치환하는 과정을 매우 간편하게 처리할 수 있도록 돕는다. 때문에 email, log data 등을 다루는 작업이나 SNS, 검색 데이터 처리 등에서도 많이 사용된다.

 

Python의 경우 re 모듈을 통해 정규표현식을 사용가능하다.

 

풀이

paragraph에서 기호 제거, 소문자 치환, banned 단어 제외, 단어별로 쪼개 리스트로 만드는 작업을 정규표현식을 이용해 한번에 처리해주자.

words = [word for word in re.sub('[^\w]', ' ', paragraph).lower().split() if word not in banned]

re.sub(a, b, c)는 c에 존재하는 모든 a를 b로 치환한 결과를 반환하는 작업이다.

때문에 paragraph내 우리가 원치 않는 문장부호들은 모두 공백으로 치환될 것이다.

이 후 소문자 치환을 진행하고, banned의 단어들을 제외하여 공백 기준 split을 통해 리스트로 만들어주는 작업을 진행했다.

 

그 다음 과정 또한 간단하다.

Python의 경우, 빈도 수를 구할 때 사용가능한 collections라는 편리한 모듈이 존재한다.

counter = collections.Counter(words)

 

counter에는 {단어 : 단어 개수} 형태의 객체가 담긴다.

이제 가장 출현 횟수가 높은 단어를 선택해 return해주자.

return counter.most_common(1)[0][0]

 

전체 코드는 다음과 같다.

class Solution:
    def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
        words = [word for word in re.sub('[^\w]', ' ', paragraph).lower().split()
                 if word not in banned]
        
        counter = collections.Counter(words)
        return counter.most_common(1)[0][0]

 


Leetcode 819. Most Common Word

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

 

 

 

-문제해결흐름을 간단히 정리한 주관적 포스팅-

 

-부족한 설명이 있다면 부디 조언 부탁드립니다-

 

 

 

 

이 포스팅은 쿠팡 파트너스 활동의 일환으로,

이에 따른 일정액의 수수료를 제공받습니다

반응형