티스토리 뷰

알고리즘

그룹 애너그램

날따라해봐요요롷게 2022. 1. 15. 13:38

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

 

def anagramsGroup(words)-> List(List(str):
	anagrams = collections.defaultdict(list)
    for word in words:
    	anagrams[''.join(sorted(word))].append(word)
    return angrams.values()
    
if __name__ == "__main__":
words = ["price", "ceipr", "cpire", "criep", "creep", "preec", "low",
"wol", "wwws", "swss", "brian"]
anagrams(words)

코드가 짧다. 그 만큼 함수를 충분히 이해하고 잘 알고 있어야 한다.

하나씩 천천히 살펴보겠다.

 

anagrams_dict = collections.defaultdict(list)

본래 딕셔너리는 key값을 부여하여 삽입을 하는 경우 key값이 존재하는 않으면 KeyError가 발생한다.

해당 함수는 key값이 존재하지 않아도 default 키를 넣거나 들어온 데이터를 key로 생성한다.

 

for word in words:
	print(sorted(word))
    # >> ['c', 'e', 'i', 'p', 'r'], ['l', 'o', 'w']
    print(''.join(sorted(word)))
    # ceipr, ceepr, low , swww 
    print(anagrams_dict[''.join(sorted(word))])
    # >> [] 키에 맞는 리스트가 비어있다.
    # anagrams_dict = {
    #     'ceipr' : [append되는 word]
    #                  }
    anagrams_dict[''.join(sorted(word))].append(word)
return angrams.value()

# sorted(word) >> word = price >>

['c', 'e', 'i', 'p', 'r']

 sorted() : 들어오는 문자열을 문자 하나로 나누어 순위에 맞는 정렬을 진행한뒤 '리스트' 로 return 한다.

 

#join()

''.join(sorted(word)) #word = price
>>ceipr

join() 함수는 리스트를 값으로 받아온다. 받아온 리스트의 문자를 모두 합친다.

만약 join 함수 앞에 특정 조건이 있다면 ex ) '_'.join() ==> a_b_c 처럼 각각의 문자 사이에 조건이 들어가게 된다.

아무것도 넣지 않고자 한다면 ''을 사용하면 된다.

 

#딕셔너리['키값']

anagrams_dict[''.join(sorted(word))]
print(anagrams_dict[''.join(sorted(word))])
>> # anagrams_dict = {
   #     'ceipr' : [append되는 word]
   #                  }
anagrams_dict[''.join(sorted(word))].append(word)

그렇게 만들어진 문자열을 딕셔너리의 키로 사용한다. 딕셔너리에 키가 없다면 넣고자 하는 키를 알아서 생성한다.

위의 코드는 현재 '딕셔너리 키' 를 다루는 코드이다. 해당 키의 value 값에 리스트의 값을 넣기 위해 리스트 append를 사용하여 현재 for문을 돌고 있는 단어를 추가한다.

'알고리즘' 카테고리의 다른 글

dfs - 섬의 개수(number of islands)  (0) 2022.01.21
DFS (GRAPH)  (0) 2022.01.21
스택, 큐  (0) 2022.01.18
연결리스트 / (문제) 팰린드롬 연결리스트  (0) 2022.01.17
주식을 사고팔기 가장 좋은 시점  (0) 2022.01.17
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함