Algorithm
가장 흔한 단어
Hoonco
2023. 1. 15. 17:45
문제.
금지된 단어를 제외하고 가장 흔하게 등장하는 단어를 출력하라, 대소문자 구분을하지 않으며, 구두점 또한 무시한다.
예제 1.
paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."
banned = ["hit"]
출력
"ball"
코드
import re
# 금지된 단어를 제외하고 가장 흔하게 나오는 단어를 출력하라 대소문자 구분 x, 구두점 무시
paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."
banned = ["hit"]
def solution(text, banned):
dic = {}
# 작업전 셋팅 ( 구두점, 대소문자 무시 )
text = re.sub("\W", " ", text).lower()
split = text.split()
for x in split:
if x in banned:
continue
if x in dic:
dic[x] += 1
else:
dic[x] = 0
return max(dic.items(), key=lambda item: item[1])[0]
print(solution(paragraph, banned)) # ball
re 라이브러리를 통해
정규 표현식을 적용하여 단어들만 남도록 셋팅한다.
이후 단어 별로 학인 하기 위해 split으로 단어들을 잘라준다.
나는 dictionary 자료구조를 사용했는데.
딕셔너리 자료구조는 내부적으로 해쉬테이블을 사용하기 때문에 탐색에 O(1)의 시간복잡도가 걸려 빠른 동작 시간을 기대할 수 있다.
이후 banned에 있다면 넘어가고 아닌경우
딕셔너리의 값을 저장하거나 증가 시켜준다. ( 키는 단어, 값은 카운팅 )
이후 딕셔너리의 value 값을 기준으로 max 값을 찾는다.
max 함수에 들어간 것이 딕셔너리이기 때문에 튜플 형태로 반환 된다. ex) (key, value)
우리가 필요한 것은 단어 만이기 때문에 첫번째 원소에 접근하여 반환한다.