금지된 단어를 제외한 가장 흔하게 등장하는 단어를 출력하라. 대소문자 구분을 하지 않고, 구두점도 무시한다.
입력
paragraph = "Bob hit a ball, the hit BALL flew far after it was hit."
banned = ["hit"]
출력
"ball"
✍️ 문제풀이
1. 대소문자와 쉼표, 구두점 등을 처리해주는 작업을 한다. (= 데이터클렌징)
2. 개수를 담아두는 변수로 딕셔너리를 사용하며 기본 값이 자동으로 부여되게 한다. (키 존재 유무를 확인하지 않고 즉시 사용 가능)
3. 딕셔너리 변수에서 값이 가장 큰 키를 가져온다.
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]
word_count = defaultdict(int)
for word in words:
word_count[word]+=1
return max(word_count, key=word_count.get)
🔎 코드분석
"애너그램" 이란, 언어유희로 문자를 재배열 하여 다른 뜻을 가진 단어로 바꾸는 것을 말한다.
문제
문자열 배열을 받아 애너그램 단위로 그룹핑하라
입력
strs = ["eat","tea","tan","ate","nat","bat"]
출력
[["bat"],["nat","tan"],["ate","eat","tea"]]
✍️ 문제풀이
정렬하여 비교하는 방법을 사용한다.
1. sorted()는 문자열을 잘 정렬하며 결과를 리스트 형태로 리턴하는데, 이를 다시 키로 사용하기 위해 join()으로 합쳐 이 값을 키로하는 딕셔너리로 구성한다.
2. 애너그램 끼리 같은 키를 갖게 되어 append한다.
3. 딕셔너리의 키를 제외한 값을 리스트에 저장하여 출력한다.
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
anagrams = collections.defaultdict(list)
for word in strs:
# 정렬한 문자를 딕셔너리에 다시 추가
anagrams[''.join(sorted(word))].append(word)
return list(anagrams.values())
a = [2, 4, 1, 9, 7]
sorted(a)
>>> [1, 2, 4, 7, 9]
alist.sort()
a = ['cde', 'cfc', 'abc']
# 함수를 이용
def fn(s):
return s[0], s[-1] # 첫 문자열과 마지막 문자열 기준으로 정렬
print(sorted(a, key = fn))
>>> ['abc', 'cfc', 'cde']
--------------------------------
a = ['cde', 'cfc', 'abc']
# 람다를 이용하여 처리
sorted(a, key=lamda s: (s[0],s[-1]))
>>> ['abc', 'cfc', 'cde']