6장_5 문자열 조작(그룹 애너그램)

문자열의 배열을 받아, anagrams를 그룹화하라.
Anagram은 일반적으로 모든 원본 문자를 정확히 한 번 사용하여 다른 단어 나 구의 문자를 재배열하여 형성 된 단어 또는 문구입니다.

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

애너그램이란 일종의 언어유희이다. 주어진 단어를 재배열하여 다른 뜻을 가진 새로운 단어로 만드는 것을 말한다. 예를 들면 문전박대를 대박전문으로 바꿔부르는 것 말이다.

일단 코드를 살표보자.

import collections
from typing import List

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        anagrams = collections.defaultdict(list)
        
        for word in strs:
            #정렬하여 딕셔너리에 추가
            anagrams[''.join(sorted(word))].append(word)
        return list(anagrams.values())
anagrams = collections.defaultdict(list)

우선 anagrams라는 딕셔널리를 설정한다.

for word in strs:
            #정렬하여 딕셔너리에 추가
            anagrams[''.join(sorted(word))].append(word)
        return list(anagrams.values())

그리고 정렬한 값을 키로 하여 딕셔너리에 추가한다.
sorted(word)로 단어들을 순서만 다른 단어들을 구분하기 위해 알파벳순으로 정렬하여 append(word) 같은 단어지만 다른 순서를 가진 단어들을 묶는다.

  • 만약 존재하지 않는 키를 삽입 할 수도 있으니 에러가 나지 않게 defultdict()로 선언하여 매번 키 존재 여부를 체크하지 안하고 비교 구문을 생략해 간결하게 구성할 수 있다.

return list(anagrams.values())
그리고 우리가 출력에 필요한건 키값이 아닌 키값과 매칭되는 것들을 출력하는 것이니 values()를 사용하여 반환받는다.

좋은 웹페이지 즐겨찾기