문제5: 그룹 애너그램

이걸 아스키코드로 접근했더니 아주 아무런 생각도 안났다. 근데 풀이를 봐도 이게 저 생각이 바로 안난다.
 

문제


문자열 배열을 받아 애너그램 단위로 그룹핑하라
(애너그램 = 이루어진 문자들이 똑같은 문자열)
 

입력


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

출력


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

풀이


  1. 우선 이 문제는 딕셔너리를 사용해야 한다.
    1. 각 단어를 정렬하여 키 값으로 사용하고, 배열에 각 값을 넣는다.
  1. 리턴시에 dict.values를 사용해 반환한다.
 
anagrams = collections.defaultdict(list) for word in strs: anagrams["".join(sorted(word))].append(word) return list(anagrams.values())
 

새로운 개념


  • collections.defaultdict(list) : 키값이 없어도 에러가 나지 않도록 선언해주고 value는 list로 초기화해준다
  • “”.join(sorted(word)) :
    • “”.join(list)는 배열을 문자열로 바꿔주고
    • sorted(list or str)은 팀소트(최선: O(n), 평균:(nlogn), 최악: O(nlogn))를 사용하는 정렬 방식이다.
  • 다시한번 복습
    • sorted(list) → list # sorted역시 sorted(a, key=lambda …)을 사용가능하다.
    • list.sort() → None # sort()는 리스트 자체를 제자리 정렬
  • dict.values() → dict_values 객체
    • 따라서 list로 변환이 필요하다.
    •