알고리즘 문제풀이/리트코드

[리트코드/파이썬] 49. Group Anagrams (문자열, 딕셔너리)

summer_light 2023. 12. 11. 13:02

[리트코드/파이썬] 49. Group Anagrams (문자열, 딕셔너리) 

49. Group Anagrams

Medium

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.

 

Example 1:

Input: strs = ["eat","tea","tan","ate","nat","bat"]
Output: [["bat"],["nat","tan"],["ate","eat","tea"]]

Example 2:

Input: strs = [""]
Output: [[""]]

Example 3:

Input: strs = ["a"]
Output: [["a"]]

Constraints:

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

[내 풀이]

※ 소요시간 : 5 분

※ 풀이 전략

- 같은 그룹의 알파벳을 분류하기 위해 sorted(x)

- 딕셔너리로 같은 분류(key)를 갖는 값들을 정리  

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        groups = dict()
        # 같은 문자로 구성되었으면 같은 그룹
        for x in strs:
            sorted_x = ''.join(sorted(x))
            groups[sorted_x] = groups.get(sorted_x, []) + [x] 
        # 같은 그룹끼리 묶어 리턴
        return list(groups.values())

 

※ 중요 포인트

- groups.values() 만 하면 안 되고, list( )로 한 번 값을 정리 해주어야 한다. 

 

※ 다시 풀기

- defaultdict 써서 다시 풀기 

from collections import defaultdict
class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        groups = defaultdict(list)
        # 같은 문자로 구성되었으면 같은 그룹
        for x in strs:
            groups[''.join(sorted(x))].append(x)
        # 같은 그룹끼리 묶어 리턴
        return list(groups.values())

 


[다른 사람의 풀이]

※ 풀이 전략

- 나와 같다.

from collections import defaultdict

strs = ["eat","tea","tan","ate","nat","bat"]

anagrams = defaultdict(list)
for word in strs:
    anagrams["".join(sorted(word))].append(word)
    
return list(anagrams.values())

 

※ 중요 포인트

- defaultdict은 존재하지 않는 키를 삽입하려해도 error가 나지 않는 딕셔너리

- 따라서, defaultdict 를 쓰면 굳이 groups.get( ) 을 쓰지 않아도 된다.