02. Study/Algorithm
Most Common Word [leetcode 819]
미카이
2024. 8. 11. 23:22
https://leetcode.com/problems/most-common-word/description/
가장 흔한 단어
1. 처음 풀이법
- 소문자 변경
- 구두점 제거 및 단어 분리
- 단어 빈도수 계산
- 가장 빈번한 단어 찾기
순서로 간단하게 해결하였다.
처음 풀이한 코드는 다음과 같다.
from typing import List
class Solution:
def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
# 소문자로 변환
paragraph = paragraph.lower()
# 구두점 제거 및 단어 분리
words = []
current_word = ""
for char in paragraph:
if char.isalpha():
current_word += char
else:
if current_word:
words.append(current_word)
current_word = ""
if current_word: # 마지막 단어 추가
words.append(current_word)
# 단어 빈도수 계산
word_count = {}
for word in words:
if word not in banned:
word_count[word] = word_count.get(word, 0) + 1
# 가장 빈번한 단어 찾기
max_count = 0
most_common = ""
for word, count in word_count.items():
if count > max_count:
max_count = count
most_common = word
return most_common
하지만 생각해보니, 정규표현식으로 간단하게 풀이할 수 있었다.
import re
from typing import List
class Solution:
def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
# 소문자로 변환하고 알파벳이 아닌 문자를 공백으로 대체
paragraph = re.sub(r'[^a-zA-Z]', ' ', paragraph.lower())
# 단어로 분리
words = paragraph.split()
# 단어 빈도수 계산
word_count = {}
for word in words:
if word not in banned:
word_count[word] = word_count.get(word, 0) + 1
# 가장 빈번한 단어 찾기
return max(word_count, key=word_count.get)
두개 속도를 비교해보면 처음 순서대로 풀이한게 속도 측면은 더 빨랐으며, 아래 풀이는 간편하게 풀이할 수 있다.
아마 코테를 보게된다면 정규표현식은 생각못하고 첫번째 방법으로 풀이할 것 같다.