본문 바로가기

알고리즘

[파이썬 알고리즘 인터뷰] 가장 흔한 단어

728x90
 

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

나의풀이

def mostCommonWord(self, paragraph: str, banned: List[str]) -> str:
        sol={}
        # 특수문자 전처리
        for p in paragraph:
            if p in ['!','?','\'',';','.',',']:
                paragraph = paragraph.replace(p,' ')
        paragraph=paragraph.lower()
        paragraph=paragraph.split()
        
        for p in paragraph:
            c=paragraph.count(p)
            sol[p]=c
        
        sort_sol = sorted(sol.items(), key = lambda x : x[1], reverse=True)
        for s in sort_sol:
            if s[0] in banned:
                pass
            else:
                return s[0]
  • dict.item() : dict를 튜플(key, value)로 변환

먼저 특수문자가 포함되어 있기 때문에 전처리를 한 뒤 단어들의 갯수를 파악하여 딕셔너리 형태로 저장한 뒤 금지 단어에 포함되지 않는 가장 빈도수가 큰 단어를 출력하는 방법으로 풀었다.

풀이

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]
  • r'string' : 문자열이 구성된 그대로 반환
a = 'abcdef\n'
print(a)

b = r'abcdef\n'
print(b)
  • \w : [a-zA-Z0-9_]
  • ^ : 제외하다. 
  • colletions.Counter() : dict 형태로 갯수 저장
  • Counter.most_common(num) : 가장 빈도수가 높은 순서대로 num만큼 반환. 리스트 안에 튜플형태로 반환 ex. [('bob',1 )]  

정규형을 사용하여 전처리를 진행하고 colletions.Counter()를 통해 개수 반환

 

반응형