애너그램은 일종의 말장난으로 어떻나 단어의 문자를 재배열하여 다른 뜻을 가지는 다른 단어로 바꾸는 것을 말한다.
예를들면, "eat", "tea", "ate"는 같은 철자를 포함하지만 다 다른 의미를 가지는 단어이다.
풀이
class Solution:
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())
딕셔너리를 사용하여 각 단어들을 분류 및 재배열하는 것 까지는 알았는데, 어떠한 함수들을 어떻게 사용하여 구현을 해야할지 모르겠어서 풀이를 참조했다.
"anagarams = collections.defaultdict(list)" 는 존재하지 않는 키를 삽입하려 할 경우 KeyError가 발생하기 때문에 항상 디폴트를 생성해주는 defaultdict()로 선언하였다.
"anagrams[ ' '.join(sorted(word))].append(word)"에서 sorted(word)로 각 단어를 철자 순으로 재배열되는 리스트로 만든 후 ''.join(sorted(word))로 재배열된 리스트를 하나의 단어로 만들어서 key로 활용해준다. 그 후에 .append(word)로 해당 key에 그 word를 삽입하여준다.
"list(anagrams.valued())"로 딕셔너리의 값들을 2차원 배열로 표현해서 반환해준다.
'멋진 개발자 > 알고리즘' 카테고리의 다른 글
LeetCode 561. Array Partition (0) | 2024.05.27 |
---|---|
LeetCode 42. Trapping Rain Water (0) | 2024.05.24 |
LeetCode 1. Two Sum (0) | 2024.05.23 |
LeetCode 344. Reverse String (0) | 2024.05.19 |
LeetCode 125. Valid Palindrome (0) | 2024.05.16 |