본문 바로가기
Algorithm

(leetcode) Group Anagrams

by 안자바먹지 2021. 1. 4.
728x90

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

(애너그램이란 문자를 재배열하여 다른 뜻을 가진 단어로 바꾸는 것을 말한다.)

 

입력

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

 

출력

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

 

 

 

from collections import defaultdict

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        anagrams = defaultdict(list)
        
        for word in strs:
            anagrams[''.join(sorted(word))].append(word)
        
        return anagrams.values()

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

sorted()는 문자열도 정렬하여 리스트 형태로 리턴하는데, 이를 다시 키로 사용하기 위해 join() 으로 합쳐 이 값을 키로 하는 딕셔너리 형태로 구현한다. (ex: {'aet': ['eat', 'ate'], 'atn': ['tan']})

또한 존재하지 않는 키를 삽입하려 할 경우 KeyError 가 발생하므로 항상 디폴트를 생성해 주는 defaultdict로 선언하여 매번 키 존재 여부를 체크하지 않고 사용할 수 있다.

 

 


참고

"".join(sorted(arr)) : 문자열을 sorted 하면 리스트 형태로 리턴되는데 이를 다시 문자열로 만들기 위함.

728x90

'Algorithm' 카테고리의 다른 글

투 포인터 (two pointer) 기법  (0) 2021.01.05
(카카오) 무지의 먹방 라이브 - javascript  (0) 2021.01.05
(leetcode) Most Common Word  (0) 2021.01.04
(leetcode) Reorder Data in Log Files  (0) 2021.01.04
(leetcode) Valid Palindrome  (0) 2021.01.04

댓글