Algorithm

그룹 애너그램

Hoonco 2023. 1. 15. 18:09

애너그램 이란?

일종의 언어유희로 문자를 재배열하여 다른 뜻을 가진 단어로 바꾸는 것을 말한다.

 

문제 .

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

 

예제 1.

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

출력

[

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

]

 

코드

# 문자열을 받아 애너그램 단위로 그룹핑하라.
q = ["eat", "tea", "tan", "ate", "nat", "bat"]


def solution(strs):
    dic = {}
    for x in strs:
        # ord로 유니코드 값 가져오기
        sortedStr = ''.join(sorted(x))
        # 딕셔너리에 sortedStr : [] 형태로 넣기
        if sortedStr in dic:
            value = dic[sortedStr]
            value.append(x)
        else:
            dic[sortedStr] = [x]
    # value 값에 대해서만 리스트로 반환
    print(f"dic: {dic}") #dic: {'aet': ['eat', 'tea', 'ate'], 'ant': ['tan', 'nat'], 'abt': ['bat']}
    return list(dic.values())


print(solution(q))

 

리스트를 돌면서 문자열을 전부 정렬한다. 

애너그램의 기준이라면 문자열이 정렬된 값이 항상 똑같을 것이기 때문이다.

이를 딕셔너리의 키값으로 가져가고

정렬 전의 문자열을 넣어 준다.

실제로 딕셔너리에는 

{'aet': ['eat', 'tea', 'ate'], 'ant': ['tan', 'nat'], 'abt': ['bat']}로 저장되게 된다.

 

이후 딕셔너리의 값들을 리스트화 시켜 반환시킨다.