거누의 개발노트

파이썬 알고리즘 인터뷰 - 그룹 애너그램 본문

코딩테스트

파이썬 알고리즘 인터뷰 - 그룹 애너그램

Gogozzi 2022. 5. 15. 13:20
반응형

문제

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

애너그램?

일종의 말장난으로 어떠한 단어의 문자를 재배열하여 다른 뜻을 가지는 다른 단어로 바꾸는 것을 말한다. 고대 유대인들이 히브리어로 하곤 했고, 중세 유럽에도 큰 인기를 끌었다. 프랑스 궁정에서는 '왕을 위해 애너그램을 하는 사람'을 고용하기도 했을 정도다. 중세의 대표적인 어구전철은 라틴어로 된 아베 마리아 의 애너그램이다.

우리나라 말로는 '문전박대' 를 '대박전문' 으로 바꿔 부르는 단어 등이 있다.

입력

['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())

회고

파이썬 문법도 잘 모르고 오랜만에 알고리즘 공부를 다시 시작해서 일단 풀려고 시도해봤지만 풀지못했다.
책에있는 코드를 보니까 어느정도 이해가 되었다.

반응형
Comments