https://leetcode.com/problems/most-common-word/
Most Common Word - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
📌문제 설명
str으로 입력을 받아 그 단어 중 banned 리스트에 없는 단어중 가장 많은 빈도의 단어를 반환하는 문제!
def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
리트코드는 이렇게 함수형태로 주어진다.
이에따라서 리스트와 문자열이름은 주어진다.
여기서 str형태로 주어진 문자의 이름은 paragraph이다.
문제 설명을 보면 대소문자 구분이 없고, 구두점(, .)은 무시한다.
리스트컴프리헨션과 정규표현식, Counter객체를 이용해 풀수있다.
<전체코드>
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]
ans = collections.Counter(words)
return(ans.most_common(1)[0][0])
먼저
import re
를 하고 re에서 sub 함수를 이용해어 구두점을 무시한다.
re.sub(r'[^\w]', ' ' ,paragraph)
[^\w]은 정규표현식이다. ^는 뒤에 오는 정규표현식이 아닌것을 의미한다.
\w은 알파벳-대소문자를 의미한다.
즉 알파벳이 아닌 것들을 ' '(띄어쓰기)로 대체하는 것이다.
str 형태를 반환한다.
이것을 lower()을 이용해 대소문자 구분을 없애고, split()을 통해 공백을 기준으로 리스트를 반화한다.
if word not in banned
를 붙여 banned에 있는 것은 제외시킨다.
즉
words =[word for word in re.sub(r'[^\w]',' ',paragraph)
.lower().split()
if word not in banned]
이런 코드를 통해 소문자로 banned에 없는 단어 하나하나를 리스트로 만들어 words는 갖고있다.
ans = collections.Counter(words) # Counter의 c가 대문자임을 유의
를 통해 ans에 각 문자와 빈도수를 딕셔너리 형태로 갖고있다.
return ans.most_common(1)[0][0]
을 통해 딕셔너리에서 가장 빈도수가 높은 하나를 골라 (1), 0번째 이므로 [0]을 붙이고
값은 0번째에 들어있으므로 [0]을 붙인다.
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."
'프로그래밍 > 프로그래밍책📚' 카테고리의 다른 글
면접을 위한 CS전공지식 노트_OS (0) | 2022.06.24 |
---|---|
[leetcode][Python]234. Palindrome Linked List(4일간의 팰린드롬 연결리스트 해결기🤪) (0) | 2022.02.04 |
[leetcode]121. Best Time to Buy and Sell Stock (0) | 2022.01.30 |
[리트코드][Python]125-valid Palindrome (0) | 2022.01.25 |
(1)파이썬알고리즘인터뷰 - 빅오와 자료형 (0) | 2022.01.21 |