ex ) 입력: ["eat","tan","ate","nat"] -> 출력 : [ ["ate","eat"],["nat,"tan"] ]
import collections
def groupAnagrams(strs):
anagrams = collections.defaultdict(list)
for word in strs:
anagrams[''.join(sorted(word))].append(word)
return anagrams.values()
#함수 테스트
groupAnagrams(["eat","tea","tan","ate","nat","bat"])
dict_values([['eat', 'tea', 'ate'], ['tan', 'nat'], ['bat']])
anagrams = collections.defaultdict(list)는 항상 디폴트를 생성해주는 딕셔너리 입니다. 이번 경우에는 디폴트를 list로 설정했기 때문에, key값에 대한 디폴트 값이 빈 리스트로 설정이 됩니다.
sorted()는 리스트 내에서 오름차순으로 정렬해 주는 값을 리턴해주는 함수입니다. 리스트 뿐만 아니라 문자열에도 잘 적용이 되는 함수입니다.
sorted( , key = ) 를 통해 정렬기준을 길이로 또는 특정 문자열로 지정해 줄 수 있습니다.
그러므로 입력받은 리스트의 문자열들을 오름차순으로 정렬 후 같은 애너그램 단위의 문자열들은 anagrams 딕셔너리에 같은 key값 안에 저장하는 형식입니다.
그리고 저장된 anagrams 딕셔너리의 valuse값을 리턴하면서 결과를 출력합니다.
# 테스트케이스에 사용됐던 anagrams를 출력.
print(anagrams)
defaultdict(<class 'list'>, {'aet': ['eat', 'tea', 'ate'], 'ant': ['tan', 'nat'], 'abt': ['bat']})
다음과 같이 anagrams ( defaultdict ) 이 생성됨을 알 수 있습니다.