본문 바로가기
DEV/알고리즘 문제 풀이

LEETCODE(리트코드) 49번 Group Anagrams

by krokerdile 2022. 11. 25.
728x90

Leetcode 49

문제 설명

문자열 배열을 주고 문자열 구성요소가 같은 것들끼리 그룹을 지어서 배열로 반환해주면 되는 문제 

문제 푸는데 필요한 요소들

  • 문자열 서순을 바꿔줘야 할 거 같음
  • 문자열 같은 거 끼리 배열에 넣어주기

위와 같이 생각을 하고 처음에 문제를 제출 했었던 코드

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        sort_strs = []
        for str in strs:
            if sorted(str) not in sort_strs:
                sort_strs.append(sorted(str))

        result = []
        for i in sort_strs:
            temp = []
            for str in strs:
                if i == sorted(str):
                    temp.append(str)
            result.append(temp)

        return result

처음에 제출 했을 때는 방향은 맞다고 생각을 했는데, 왠지 시간 초과가 날 거 같았었다. 제출하고 110번 정도 테스트 케이스에서 바로 오류가 나서 다시 문제를 읽어보면서 생각해봤을 때는 set이나 dict을 써서 하는 게 좋을 거 같다는 생각을 할 수 있었다. 

다시 생각했을 때 필요한 것들

  • dict 로 만들어서 넣어주기
  • 넣어줄 때 key값을 정렬해서 넣어주면 뱉어줄 때 key 반영해서 끼리끼리 그룹으로 내보내주기 편할거 같다.

이렇게 생각을 해서 코드를 짜는 데 python으로 dict를 쓰는 걸 찾아보니 collections.defaultdict로 작성해서 쓰는 쪽이 많이 나와서 그렇게 코드를 참고해서 써봤다. 평소에는 항상 일일이 만들어서 사용했던 거 같은데 코테 볼 때 유용하게 사용한다고 블로그 글에 다들 많이 적어두셔서 이번에 공부하는 동안은 계속 써보는 걸로 결정했다. 

따로 collections 같이 코딩 테스트에서 쓸 수 있는 표준 라이브러리를 사용하는 것도 공부를 해야 될 것 같다. 

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        # temp = {}
        temp = collections.defaultdict(list)

        for word in strs:
            temp[''.join(sorted(word))].append(word)
        return list(temp.values())

반환 해주는 것도 dict 안에 key값이 같은 것들로 모여있어서 리스트로 씌워주기만 하면 편하게 받을 수 있었던 것 같다. 

728x90