https://leetcode.com/problems/most-common-word/
금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라. 대소문자 구분을 하지 않으며, 구두점(마침표, 쉼표 등) 또한 무시한다.
이 문제는 re 모듈을 통한 전처리를 공부하기 딱 좋은 문제인것 같아서 포스팅 한다. 먼저 다음 코드를 보자.
print(re.sub(r'[^\w]',' ',paragraph))
정규식에서 \w는 단어 문자를 뜻하며, ^는 not을 의미한다. 따라서 위 정규식은 단어 문자가 아닌 모든 문자를 공백으로 치환하는 역할을 한다. 이 출력값은 다음과 같다.
이를 이용하고 리스트 컴프리헨션을 이용해 다음처럼 코드를 짤 수 있다.
words=[word for word in re.sub(r'[^\w]',' ',paragraph).lower().split() if word not in banned]
문자열에 split() 함수를 적용하면 다음과 같이 띄어쓰기를 기준으로 한 단어씩 구분하여 리스트에 추가해준다.
print(re.sub(r'[^\w]',' ',paragraph).split())
위의 방법들과 리스트 컴프리헨션을 사용해 다음과 같이 코딩할 수 있다.
def mostCommonWord(paragraph,banned):
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]
참고로 Counter 객체의 most_common 함수 설명은 다음과 같다.
'알고리즘' 카테고리의 다른 글
8. 가장 긴 팰린드롬 부분 문자열(투포인터, 슬라이딩 윈도우,max) (0) | 2021.08.18 |
---|---|
7. 애너그램 (Defaultdict, join 활용, 파이썬 내장 정렬함수,sorted,sort) (0) | 2021.08.16 |
5. 문자열 관리(특정한 기준으로 정렬하기) (0) | 2021.08.16 |
4. 문자열 뒤집기 (0) | 2021.08.16 |
3. 문자열 - 유효한 펠린드롬 (0) | 2021.08.16 |