https://leetcode.com/problems/most-common-word/
멍청하면 몸이 고생한다.
class Solution:
def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
new_paragraph = []
word = ""
paragraph = paragraph.lower()
for j in range(len(paragraph)):
if paragraph[j].isalpha():
word = word + paragraph[j]
if j == len(paragraph)-1:
new_paragraph.append(word)
else:
if word != "":
new_paragraph.append(word)
word=""
paragraph = new_paragraph
for a in banned:
a.lower()
if banned:
for words in banned:
while words in paragraph:
paragraph.remove(words)
max_count = 0
for words in paragraph:
if max_count <= paragraph.count(words):
max_count = paragraph.count(words)
max_word = words
return (max_word)
처음 제출한 답안이다. paragraph
리스트를 정리하기 위해서 무자겅 덤볐다. paragraph 스트링을 소문자화 하고, 각 글자마다 알파벳인 경우에 word
에 저장해서 나오는 word
들을 새로운 리스트에 저장하고, 다시 그 리스트를 paragraph
에 넣었다.
banned에 있는 단어들 각각에 대하여 모두 remove
함수를 적용하고, 최빈출 단어도 각각의 count
값을 구하여 max 값을 도출시킨 수고를 하였다.
class Solution:
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]
re 모듈과 collection모듈에 대한 공부가 필요할 듯 하다.
정규식에서 \w
는 단어 문자를 뜻하며, ^
는 not을 뜻한다. 따라서 단어문자가 아닌 모든 문자를 공백으로 치환해준다.
또한 collections.Counter(words)
는 words 리스트를 나온 횟수와, 그 단어를 딕셔너리 형태로 불러준다. 여기서 가장 많이 나온 단어의 첫번째 인덱스를 리턴해준다.