2024. 1. 18. 09:28ㆍ코딩 테스트/파이썬 알고리즘 인터뷰
금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라. 대소문자를 구분하지 않으며, 구두점(마침표, 쉼표 등) 또한 무시한다.
예제
[예제1]
입력
paragraph = 'Bob hit a ball, the hit BALL flew after was hit.'
banned = ['hit']
출력
'ball'
풀이
데이터 클리닝 작업을 먼저 진행한다. ',' 문자를 ' ' 공백문자로 치환한다. 치환은 re 모듈을 사용한다.
s = re.sub('[^\w]', ' ', s)
대소문자를 가리지 않으므로 lower 함수 호출하여 소문자로 치환한다.
s = s.lower()
해당 문자를 split한 후 리스트에서 금지된 문자를 제거한다. python의 리스트 컴프리션을 사용하면 간단히 처리할 수 있다. split된 리스트의 각 문자 중 banned에 포함되지 않은 문자열만 리스트에 추가되었다.
words = [word for word in s.split() if word not in banned]
위의 코드는 다음과 같이 한줄로 표현할 수 있다.
words = [word for word in
s.re.sub('[^\w]', ' ', s).lower().split()
if word not in banned]
생성된 리스트 중 가장 흔하게 존재하는 값을 구하기 위해 collections.Counter 클래스를 사용한다. Counter는 전달받은 리스트를 {리스트값 : key, 개수 : value} pair로 저장하는 딕셔너리이다.
counters = collections.Counter(words)
이후 most_common(1)을 호출하면 가장 value가 큰 값을 list[tuple[_T, int]] 포맷으로 호출한다. 예를 들어 [(ball, 2)] 형태로 호출한다. 단어만 추출하면 되므로 반환 값의 most_common(1)[0][0] 의 값만 가져온 후 리턴한다.
return counters.most_common(1)[0][0]
전체 코드
def mostCommonWord(paragraph : str, banned : list[str]):
words = [word for word in re.sub('[^\w]', ' ', paragraph).lower().split()
if word not in banned]
counters = collections.Counter(words)
return counters.most_common(1)[0][0]
'코딩 테스트 > 파이썬 알고리즘 인터뷰' 카테고리의 다른 글
Python 알고리즘 인터뷰 - 문제6 가장 긴 팰린드롬 부분 문자열 (0) | 2024.01.18 |
---|---|
Python 알고리즘 인터뷰 - 문제5 그룹 애너그램 (0) | 2024.01.18 |
Python 알고리즘 인터뷰 - 문제3 로그파일 재정렬 (0) | 2024.01.18 |
Python 알고리즘 인터뷰 - 문제2. 문자열 뒤집기 (0) | 2024.01.18 |
Python 알고리즘 인터뷰 - 문제1. 유효한 팰린드롬 (0) | 2024.01.18 |