파이썬 알고리즘 인터뷰의 2020ver을 리뷰하고 있습니다.
4. 가장 흔한 단어
리스트 컴프리헨션과 관련해서는 지난 파이썬 기초 글에서도 작성한 바가 있습니다.
파이썬_기초단계 알아보기_ep.3 만나려면 조건이 맞아야지 (tistory.com)
그 후부터 문제에서 적용한 예를 찾고 있었는데, 마침 있었네요.
일단 문제를 살펴보겠습니다.
🎈문제
금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라.
대소문자 구분을 하지 않으며 구두점(마침표, 쉼표 등) 또한 무시한다.
🔑입력 예제
paragraph = 'Bob hit a ball, the hit BALL flew far after it was hit.'
banned = ['hit']
'ball'
🛴 풀이법.
def mostCommonWord(paragraph : str, banned:list[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]
정답을 입력할때는 mostcommonwords("입력 문장", "금지할 문장")의 형식으로
입력하면 됩니다.
시작하기 전에, collections을 쓰게 됬네요. 먼저 라이브러리를 임포트해줍니다.
import collections
from collections import Counter
특별하게도, 머신러닝에서만 쓰이던 데이터 전처리(Data preprocessing)이 여기서도
필요하다고 합니다. 바로 정규표현식을 사용하는 것인데요?
정규표현식은 여기서 다루는 것에는 상당한 시간이 소요될 것 같아서 정규표현식 사이트와
HAMA 블로그 님의 링크 첨부로 갈음하겠습니다.
요컨대 파이썬에서 문자열을 치환하는 역할을 하는 기능입니다.
이해하기 쉽게 정규표현식을 그림으로 그려주는 사이트입니다.
정규표현식 (Regex) 정리 (tistory.com)
만약 jupyter notebook이나 정규표현식 모듈이 깔려 있지 않은 파이썬을 사용하신다면
re 모듈을 임포트해야 합니다.
import re
words = [word for word in re.sub(r'[^\w]', ' ', paragraph)
.lower().split()
if word not in banned]
# \w는 word character를 뜻하고 ^는 not을 뜻합니다.
단어문자가 아닌 모든 문자를 공백으로 치환하는 역할을 합니다.
단어의 갯수는 아래를 통해 확인할 수 있습니다.
counts = collections.defaultdict(int)
for word in words:
counts[word] += 1
자. Counter를 사용하면 해당 요소안에서 갯수를 세줄수 있습니다.
추가적으로, counts.most_common()을 사용하면 가장 빈출되는 단어를 세주는 기능이 있습니다.
▼타 블로그 참조
파이썬 collections 모듈의 Counter 사용법 | Engineering Blog by Dale Seo
def mostCommonWord(paragraph : str, banned:list[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]
mostCommonWord로 함수를 정의했습니다.
풀이 완.
'알고리즘 예시 > Leetcode' 카테고리의 다른 글
[Python algorithm interview] enumerate(), 배열의 사용 (0) | 2023.01.20 |
---|---|
[Python algorithm interview] string_2 문자열 뒤집기 (0) | 2023.01.18 |
[Python algorithm interview] 파이썬 기초 정리 (0) | 2023.01.17 |