728x90
문자열 배열을 받아 애너그램 단위로 그룹핑 하라.
(애너그램이란 문자를 재배열하여 다른 뜻을 가진 단어로 바꾸는 것을 말한다.)
입력
strs = ["eat","tea","tan","ate","nat","bat"]
출력
[["bat"],["nat","tan"],["ate","eat","tea"]]
from collections import defaultdict
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
anagrams = defaultdict(list)
for word in strs:
anagrams[''.join(sorted(word))].append(word)
return anagrams.values()
애너그램을 판단하는 가장 간단한 방법은 정렬하여 비교하는 것이다.
sorted()는 문자열도 정렬하여 리스트 형태로 리턴하는데, 이를 다시 키로 사용하기 위해 join() 으로 합쳐 이 값을 키로 하는 딕셔너리 형태로 구현한다. (ex: {'aet': ['eat', 'ate'], 'atn': ['tan']})
또한 존재하지 않는 키를 삽입하려 할 경우 KeyError 가 발생하므로 항상 디폴트를 생성해 주는 defaultdict로 선언하여 매번 키 존재 여부를 체크하지 않고 사용할 수 있다.
참고
"".join(sorted(arr)) : 문자열을 sorted 하면 리스트 형태로 리턴되는데 이를 다시 문자열로 만들기 위함.
728x90
'Algorithm' 카테고리의 다른 글
투 포인터 (two pointer) 기법 (0) | 2021.01.05 |
---|---|
(카카오) 무지의 먹방 라이브 - javascript (0) | 2021.01.05 |
(leetcode) Most Common Word (0) | 2021.01.04 |
(leetcode) Reorder Data in Log Files (0) | 2021.01.04 |
(leetcode) Valid Palindrome (0) | 2021.01.04 |
댓글