[Python] Leetcode - 49. 애너그램

Isabel·2022년 7월 26일
0

알고리즘 문제풀이

목록 보기
34/36

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

Example 1:

Input: strs = ["eat","tea","tan","ate","nat","bat"]
Output: [["bat"],["nat","tan"],["ate","eat","tea"]]

cf) An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.

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

anagram_dict = {}  # 애너그램단위로 묶은 결과가 들어있는 딕셔너리
# key : 해당 단어를 정렬한 결과
# value : key와 같은 애너그램 그룹에 있는 단어들의 모음을 리스트로 만든다.

for word in words:
    sorted_word = "".join(sorted(word))  # sorted() => 결과가 리스트, 문자열로 변환해야한다. ==> join()
    # word = "eat"
    # sorted(word) = ["a" , "e" , "t"]
    # "".join(sorted(word)) = "aet"
    # ".".join(sorted(word)) = "a.e.t"

    if anagram_dict.get(sorted_word):  # 딕셔너리에 애너그램 그룹이 존재한다.
        anagram_dict[sorted_word].append(word)  # 존재하면 리스트에 추가를 해준다.
    else:
        anagram_dict[sorted_word] = [word]  # 존재하지 않으면 리스트를 새로 만들어준다.

print(anagram_dict)

dictionary와 친해져야겠다.
dict[key].append(a) -- dictionary의 key값에 리스트가 있다면 key에 접근하여 value에 해당하는 자리에 append()로 a를 추가할 수 있다.
이와는 달리 dict[key] = [a] 로 새로운 key와 그에 해당하는 list value를 생성할 수 있다.

sorted()함수를 사용하면 단어를 한 글자씩 쪼개어서 list로 만들 수 있다. # ['a', 't', 'e']
이렇게 만든 리스트를 다시 "".join 공백없이 join하면 쭈루룩 붙일 수 있다. # ate

dictionary.get(x)을 통해 x가 dictionary의 key 중에 있는지 없는지를 확인할 수 있다.(이에 해당하는 value값을 return 함) key가 없을 경우, 에러가 발생하지 않고 None을 리턴한다.

0개의 댓글