[LeetCode] 49. Group Anagrams 파이썬 풀이

https://leetcode.com/problems/group-anagrams/

문제 설명

애너그램은 같은 문자로 이루어졌지만 배열 순서가 다른 문자열을 말한다.
주어진 문자열 배열에서 애너그램인 문자열들끼리 묶어 이중 리스트를 만들어 반환하는 문제이다.

영어 소문자만 주어진다는 조건이 있다

코드 구현

정렬과 딕셔너리로 풀기

문자열을 정렬해주면 애너그램인 문자열들은 모두 동일하게 나올 것이다. 예를 들어 ate, eat, tea가 있을 때 각각 정렬해주면 모두 aet이 나올테니까 이것을 key로 하고 애너그램인 문자열들의 리스트를 value로 하여 딕셔너리에 넣어준 후 마지막에 value만 빼내면 될 것 같다.

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

defaultdict에 list 자료구조로 초기화시키도록 설정해주었다. 그러면 문자열을 딕셔너리에 추가해주는 부분의 코드가 간단해진다. 만약 기본 파이썬 딕셔너리를 사용했다면 기존에 리스트를 생성했는지 여부를 점검해야할 것이다.

파이썬 문자열의 join 메소드는 해당 문자열을 delimeter로 사용해서 패러미터로 들어온 문자들을 묶어준다. sorted로 문자열을 재정렬하면 문자 리스트로 반환되므로 이를 다시 합쳐주기 위해 ""(공백)에 join 메소드를 써서 다시 문자열로 묶어준 것이다.

마지막을 딕셔너리의 value만 values 메소드로 반환시키고 list함수로 list 자료구조로 바꾸어 주었다.

좋은 웹페이지 즐겨찾기