[ LeetCode #49 ]

[ LeetCode #49 ] Group Anagrams 그룹 애너그램 #

[ LeetCode #49 ] Group Anagrams 바로가기 #

💡 유용한 지식 #

Dictionary defaultdict 객체

  • 존재하지 않는 키를 조회할 경우 에러 메시지 대신 디폴트 값을 기준으로 키에 대한 딕셔너리 아이템을 생성해줌
# defaultdict() 사용으로 불필요한 if 연산 제거
from collections import defaultdict
groups = defaultdict(list)

문제 #

Given an array of strings strs, group the anagrams together. You can return the answer in any order.

An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.

Constraints:

  • 1 <= strs.length <= 104
  • 0 <= strs[i].length <= 100
  • strs[i] consists of lowercase English letters.

내가 했던 접근 #

[ 풀이 ]

  • input 단어를 각각 sorted() 후 동일한 단어끼리 딕셔너리로 그룹을 묶고 values() 로 결과 반환

[ 결과 ]

Runtime: 1956 ms, faster than 7.46% of Python online submissions for Group Anagrams.
Memory Usage: 17.3 MB, less than 83.24% of Python online submissions for Group Anagrams.

[ 코드 ]

class Solution(object):
    def groupAnagrams(self, strs):
        groups = dict()
        for string in strs:
            sorted_string = ''.join(sorted(string))
            if sorted_string in groups.keys():
                groups[sorted_string].append(string)
            else:
                groups[sorted_string] = [string]
        return list(groups.values())

[ 반성 ]

  • dict() 대신 collections.defaultdict(list) 사용하면 불필요한 if문 제거 가능

책 풀이 #

[ 풀이 ]

  • 내 접근과 동일하지만 dict() 대신 collections.defaultdict(list) 사용하여 불필요한 if문 제거 가능

[ 결과 ]

Runtime: 117 ms, faster than 58.08% of Python online submissions for Group Anagrams.
Memory Usage: 17.6 MB, less than 71.25% of Python online submissions for Group Anagrams.

[ 코드 ]

from collections import defaultdict
class Solution(object):
    def groupAnagrams(self, strs):
        groups = defaultdict(list)
        for string in strs:
            groups[''.join(sorted(string))].append(string)
        return list(groups.values())