DEV/알고리즘 문제 풀이

LEETCODE(리트코드) 49번 Group Anagrams

krokerdile 2022. 11. 25. 17:46
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
반응형