거누의 개발노트
파이썬 알고리즘 인터뷰 - 그룹 애너그램 본문
반응형
문제
문자열 배열을 받아 애너그램 단위로 그룹핑하라
애너그램?
일종의 말장난으로 어떠한 단어의 문자를 재배열하여 다른 뜻을 가지는 다른 단어로 바꾸는 것을 말한다. 고대 유대인들이 히브리어로 하곤 했고, 중세 유럽에도 큰 인기를 끌었다. 프랑스 궁정에서는 '왕을 위해 애너그램을 하는 사람'을 고용하기도 했을 정도다. 중세의 대표적인 어구전철은 라틴어로 된 아베 마리아 의 애너그램이다.
우리나라 말로는 '문전박대' 를 '대박전문' 으로 바꿔 부르는 단어 등이 있다.
입력
['eat', 'tea', 'tan', 'ate', 'nat', 'bat']
출력
[
['eat', 'tea', 'ate'],
['tan', 'nat'],
['bat']
]
작성한 코드
def groupAnagrams(strs: List[str]) -> List[List[str]]:
# 존재하지 않는 키를 삽입하려고 하면 keyError가 나서 defaultdict
anagrams = collections.defaultdict(list)
for word in strs:
# 알파벳 순으로 정렬한 문자열을 ss에 담는다.
ss = ''.join(sorted(word))
# 알파벳 순으로 정렬된 문자열을 키로 원래 문자열을 담아준다.
anagrams[ss].append(word)
# 키를 제외한 리스트 값만 리스트에 담아서 반환해준다.
return list(anagrams.values())
회고
파이썬 문법도 잘 모르고 오랜만에 알고리즘 공부를 다시 시작해서 일단 풀려고 시도해봤지만 풀지못했다.
책에있는 코드를 보니까 어느정도 이해가 되었다.
반응형
'코딩테스트' 카테고리의 다른 글
파이썬 알고리즘 인터뷰 - 세 수의 합 (0) | 2022.05.15 |
---|---|
파이썬 알고리즘 인터뷰 - 가장 긴 팰린드롬 부분 문자열 (*) (0) | 2022.05.15 |
[Java] 프로그래머스 - level1 - 모의고사 (0) | 2022.04.19 |
[Java] 프로그래머스 - level1 - 체육복 (0) | 2022.04.15 |
[Java] 프로그래머스 - level1- 폰켓몬 (0) | 2022.04.14 |
Comments