프로그래밍/프로그래밍책📚

(2)파이썬알고리즘인터뷰 - leetCode:[819]Most Common Word

개발자 덕구🐾 2022. 1. 22. 15:04
728x90

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]을 붙인다.

 

 

 

 

 

 

 

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

 

반응형