리트코드 49. Group Anagrams

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

입력

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

출력

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

애너그램이란
일종의 언어유희로 문자를 재배열하여 다른 뜻을 가진 단어로 바꾸는 것을 말한다.


✏️ 풀이 1: 정렬하여 딕셔너리에 추가

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())
  • 애너그램 관계인 단어들을 정렬하면, 서로 같은 값을 갖게 된다.
  • 애너그램 관계인 단어를 같은 key에 넣고 value들만 추출한다.

📌 정리

  • dic = collections.defaultdict(생성자)
    - 키가 없을 경우 생성자에 대응하는 디폴트 키를 가지는 딕셔너리 dic 을 생성한다.
    - dic 에 존재하지 않는 키를 삽입해도 KeyError가 나지 않고 항상 디폴트를 생성한다.
  • '구분자'.join(리스트)
    - 매개변수로 들어온 리스트의 요소를 문자열로 합친다.
    - 구분자가 있는 경우는 각 요소 사이에 구분자를 넣고 합친다.
  • dictionary[key].append(value) : 딕셔너리의 해당 키에 값을 추가한다.
  • dictionary.values() : 딕셔너리의 값만으로 리스트를 만든다.
profile
미친 존재 우주 먼지

0개의 댓글