https://github.com/onlybooks/algorithm-interview
1. 문제: 리트코드 819. Most Common Word
금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라. 대소문자 구분은 하지 않는다.
2. 내 코드
def mostCommonWord(self, paragraph, banned):
#전처리
paragraph = paragraph.lower()
paragraph = re.sub('["!?\',;.".]', ' ', paragraph)
#단어 개수 세기
dict = {}
for word in paragraph.split():
if word in dict.keys():
dict[word] += 1
elif word not in banned:
dict[word] = 1
#정렬하기
sorted_dict = sorted(dict.items(), key = lambda item: item[1], reverse = True)
print(sorted_dict)
return sorted_dict[0][0]
3. 정답
def mostCommonWord(self, paragraph: str, banned: List[str]) -> 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]
4. 배운 점
1) python 정규표현식 사용법
re.sub(바꾸기 전 패턴, 바꾼 뒤 패턴, 문자열) -> return 바꾼 뒤 문자열
2)collections 모듈의 counter class 사용
counter class: 개수를 편하게 셀 수 있도록 도와주는 클래스, 딕셔너리 리턴
most_common(n) 메소드: counter에서 가장 많이 사용된 n개의 단어를 리턴
'Computer Science > 알고리즘' 카테고리의 다른 글
[파이썬 알고리즘 인터뷰] 6. 두 수의 합 (0) | 2022.02.02 |
---|---|
[파이썬 알고리즘 인터뷰] 5. 가장 긴 팰린드롬 부분 문자열 (0) | 2022.02.02 |
[파이썬 알고리즘 인터뷰] 4. 그룹 애너그램 (0) | 2022.02.02 |
[파이썬 알고리즘 인터뷰] 2. 문자열 뒤집기 (0) | 2022.01.31 |
[파이썬 알고리즘 인터뷰] 1. 로그 파일 재정렬 (0) | 2022.01.31 |