49. Group Anagrams

Taesoo Kim·2023년 2월 2일
0

CrackingAlgorithm

목록 보기
16/36

문제링크: https://leetcode.com/problems/group-anagrams/


문제는 간간히 풀었지만, 포스팅을 하면서 정리하는건 정말 오랜만인것 같다.

다사다난했던 1월은 뒤로하고, 2월엔 진짜 매일 포스팅을 목표로 가야겠다.

문제로 돌아와서,

내가 파이썬을 너무 야매로 쓰고 있는건 아닌가 싶어서, 코테 책 하나를 빌려 공부를 시작하기로 했다.

아무 책이나 빌린줄 알았는데, 생각보다 배울점이 많아서 코드 한줄한줄 곱씹어 보는중이다.


오늘 본 문제는 anagram인데, 리스트에 있는 단어들을 애너그램별로 분류하여 출력하는, 아주 단순하지만 조금 생각을 요하는 문제이다.

예전같으면 단어마다 permutation을 돌리고, 조합해서, 리스트와 대조하면서 답안을 만들어 갔을텐데, 파이썬의 sort()는 문자열도 정렬해준다는 점에 착안하여 문제를 접근하였다.

 def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        target = collections.defaultdict(list)
        
        for item in strs:
            target[''.join(sorted(item))].append(item)
        
        return target.values()

딕셔너리에 같은 애너그램인 단어를 푸시하는 방법으로 접근했다.
키를 소트된 단어로 사용을 하였는데, 이때 sort()된 단어는 문자별로 list형태로 바뀌게 된다. 그걸 다시 join으로 string으로 바꿔야지 딕셔너리의 키로 활용을 할 수 있게 된다.

profile
SailingToTheMoooon

0개의 댓글