본문 바로가기

알고리즘

[알고리즘] 문자열 조작-그룹 애너그램 - Jungyu Ko

문제 출처

 

Group Anagrams - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제 설명

문자열 배열을 받아 애너그램 단위로 그룹핑하라.

'애너그램'이란?

일종의 언어유희로 문자를 재배열하여 다른 뜻을 가진 단어로 바꾸는 것을 말한다. '어구전철'이라고도 부르며, 과거 유럽에서는 근대까지 이러한 언어유희가 매우 유행했다고 한다. 애너그램의 우리말 예로는, '문전박대'를 '대박전문'으로 바꿔 부르는 단어 등을 들 수 있다.

예시

문제 풀이

애너그램을 판단하는 가장 간단한 방법은 정렬하여 비교하는 것이다.

애너그램 관계인 단어들을 정렬하면 서로 같은 값을 갖게 되기 때문이다.

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        
        # 존재하지 않는 key가 입력될 경우, KeyError가 발생
        # 에러가 나지 않도록 항상 디폴트를 생성해주는 defaultdict() 선언
        anagrams = collections.defaultdict(list)  
   
        # 입력 strs의 각 단어마다 반복
        for word in strs:          
            # 각 단어를 정렬 후, 문자열로 변환
            # 애너그램끼리는 같은 key를 가지게 됨
            # 이에 따라 append()를 추가하는 형태로 저장
            anagrams[''.join(sorted(word))].append(word)    

        return list(anagrams.values())