'파이썬 알고리즘 인터뷰'를 보고 작성한 글입니다. 😀
문제 👉 <Most Common Word - LeetCode>
1. 문제 (가장 흔한 단어)
금지된 단어를 제외한 가장 흔하게 동장하는 단어를 출력하라. 대소문자 구분을 하지 않으며, 구두점(마침표, 쉽표 등) 또한 무시한다.
2. 풀이
정규식
과해시
를 이용한 풀이정규식
에서 \w는 단어 문자를 뜻하며, ^은 not을 의미한다. 따라서re.sub(r'[^\w]', ' ', 문자열)
는 단어 문자가 아닌 모든 문자를 공백으로 치환한다.defaultdict(int)
를 통해 단어의 빈도수를 저장한다.- max함수를 통해 딕셔너리의 값이 가장 큰 key를 출력한다.
max(dic.keys(), key=lambda k: dic[k])
key=lambda k: dic[k]
를 통해 별도의key=
옵션을 주어 딕셔너리의 value가 가장 큰 값을 추출한다.
정규식
과Counter
를 이용한 풀이정규식
을 통해 문자열 정리counts.most_common(1)[0][0]
counts.most_common(1)
- 빈도수가 가장 높은 1개의 문자 추출 (ex, [('문자', 빈도수)]
counts.most_common(1)[0][0]
- 추출한 문자의 첫번째 배열에서 문자 추출
3. 코드
- 정규식과 해시를 이용한 풀이
from collections import defaultdict
import re
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]
dic = defaultdict(int)
for w in words:
dic[w] += 1
return max(dic.keys(), key=lambda k: dic[k])
- 정규식과 Counter를 이용한 풀이
from collections import Counter
import re
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 = Counter(words)
return counts.most_common(1)[0][0]
- 결과 :
방식 | Status | Runtime | Memory | Language |
---|---|---|---|---|
정규식과 해시 | [Accepted] | 32 ms | 14.6 MB | python3 |
정규식과 Counter | [Accepted] | 28 ms | 14.6 MB | python3 |
References
🏋🏻 개인적으로 공부한 내용을 기록하고 있습니다.
잘못된 부분이 있다면 과감하게 지적해주세요!! 🏋
'Coding Test > LeetCode' 카테고리의 다른 글
[LeetCode] 937. Reorder Log Files [Python(파이썬)] (0) | 2021.11.23 |
---|---|
[LeetCode] 561. Array Partition I [Python(파이썬)] (0) | 2021.11.23 |
[LeetCode] 238. Product of Array Except Self [Python(파이썬)] (0) | 2021.11.23 |
댓글