새오의 개발 기록

Leetcode 49: 그룹 애너그램 본문

Algorithm/Leetcode

Leetcode 49: 그룹 애너그램

새오: 2022. 10. 2. 00:08

 

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

*애너그램이란

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

ex) 문전박대 -> 대박전문



 

Group Anagrams - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

// 입력 예제
["eat", "tea", "tan", "ate", "nat", "bat"]

// 출력 예제
[
	["ate","eat","tea"],
    ["nat","tan"],
    ["bat"]
]

 

같은 애너그램 단위로 묶으라는 게 무슨 말이냐면 단어 안의 알파벳 종류와 갯수가 같은 단어끼리 묶어서 출력하라는 뜻

 

 

 

풀이

 

1. 딕셔너리

 

1. 입력된 strs의 원소인 단어들을 알파벳 별로 쪼개고, 정렬 시

-> 같은 알파벳으로 구성된 애너그램들은 똑같은 결과물이 나온다.

2. 같은 애너그램을 가진 원소들끼리 묶어야 하므로, 애너그램을 key, 원래 단어를 value로 하는 딕셔너리를 만든다.

3. 출력이 count값이 아니라, 원래 단어들이 묶인 리스트이기 때문에, 같은 key인 단어가 나올 때마다 value 리스트에 원소를 추가하는 식으로 만든다.

 

*attriute 인 .sort()의 경우 문자열에 적용할 수 없는 반면, 내장함수인 sorted()의 경우 문자열에도 잘 적용된다고 한다.

 

def groupAnagrams(self, strs):
    # 초기화를 안 해도 기본값으로 초기화 -> 예외 처리에 유용
    # 빈 딕셔너리를 collections모듈의 .defaultdict를 활용하여 만듦
    data = collections.defaultdict(list)
    for s in strs:
        #sorted 하면 배열로 반환됨
        #join 하면 다시 단어 순서대로 문자로
        #정렬된 단어를 키로, 원래 단어를 값으로
        data[''.join(sorted(s))].append(s)
    return data.values()

 

 

 

 

 


 

 

 

 

 

+ join() 보충

 

join 함수는 매개변수로 들어온 리스트에 있는 요소 하나하나를 합쳐서 하나의 문자열로 바꾸어 반환하는 함수

''.join(리스트)
'구분자'.join(리스트)

 

 

- ''.join(리스트)
''.join(리스트)를 이용하면 매개변수로 들어온 ['a', 'b', 'c'] 이런 식의 리스트를 'abc'의 문자열로 합쳐서 반환해주는 함수

여기서 구분자는 공백인 것

 

- '구분자'.join(리스트)
'구분자'.join(리스트)를 이용하면 리스트의 값과 값 사이에 '구분자'에 들어온 구분자를 넣어서 하나의 문자열로 합쳐줌
'_'.join(['a', 'b', 'c']) 라 하면 "a_b_c" 와 같은 형태로 문자열을 만들어서 반환

 

 

참고

https://blockdmask.tistory.com/468 

https://rollingsnowball.tistory.com/117

'Algorithm > Leetcode' 카테고리의 다른 글

Leetcode 561: 배열 파티션 1  (0) 2022.10.06
Leetcode 1: 두 수의 합  (0) 2022.10.03
Leetcode 819: 가장 흔한 단어  (0) 2022.10.01
Leetcode 937: 로그 파일 재정렬  (0) 2022.10.01
Leetcode 125: 유효한 팰린드롬  (0) 2022.09.30