05. 그룹 애너그램(leetcode: 49)

분석

애너그램이란?

결국 문자열의 리스트에서 같은 애너그램을 만드는 문자 들을 찾고, 해당 문자들을 리스트의 리스트로 만드는게 문제의 핵심

인자로 들어온 strs (리스트) 를 순회하면서

  1. 정렬된 문자열 sorted_s 를 만든다.

  2. sorted_skey 로 하는 해쉬의 valuestr 을 넣는다.

2번에서 value로 str 을 넣는다고 했는데, 여기서 일반적인 딕셔너리를 사용해서는 문제를 해결할 수도 없다.

왜냐하면 value 의 형태는 str 이 복수가 들어가는 리스트 여야 하는데, 일반적인 dict 로는 list를 넣는 방법이 애매하고 무엇보다도 초기값 때문에 문제가 생긴다.

defaultdict 를 사용하면 비어있는 key 에 value 를 넣으면 default 로 값을 생성한다!!!

풀이

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        dict = collections.defaultdict(list)
        for s in strs:
            dict[''.join(sorted(s))].append(s)
        return dict.values()

여기서 눈여겨 볼건 defaultdict 의 활용법이다. 이게 빛을 발하는건 5번 째 줄에있는 dict[''.join(sorted(s))].append(s) 에서다. 만약 key 값이 없는데, append 메서드를 호출하면 어떻게 될까? 일반적인 dict 였다면 out of range 에러가 발생했겠지만, defaultdict은 기본값으로 비어있는 리스트를 만들고 그 메서드를 실행한다!!

Last updated