이걸 아스키코드로 접근했더니 아주 아무런 생각도 안났다. 근데 풀이를 봐도 이게 저 생각이 바로 안난다.
문제
문자열 배열을 받아 애너그램 단위로 그룹핑하라
(애너그램 = 이루어진 문자들이 똑같은 문자열)
입력
["eat", "tea", "tan", "ate", "nat", "bat"]
출력
[ ["ate", "eat", "tea"], ["nat", "tan"], ["bat"] ]
풀이
- 우선 이 문제는 딕셔너리를 사용해야 한다.
- 각 단어를 정렬하여 키 값으로 사용하고, 배열에 각 값을 넣는다.
- 리턴시에 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로 변환이 필요하다.