[문자열] 리트코드 49: Group Anagrams

LeeJE20·2021년 9월 23일
0

파이썬 문제풀이

목록 보기
25/26

사용 언어: python 3.9.5

❓ Problem

문제 설명

https://leetcode.com/problems/group-anagrams/

anagram끼리 한 그룹으로 묶기

난이도

Medium

🚩 Solution

시도 01)

1. 접근법

같은 anagram이면 정렬했을때 같은 단어가 된다.

defaultdict에 넣으면서 한다.

2. 코드

import collections
class Solution:
    def groupAnagrams(self, strs: list[str]) -> list[list[str]]:
        dd = collections.defaultdict(list)

        for word in strs:
            # key = ''.join(word.split("").sort())
            # key = ''.join(list(word).sort())

            # key = ''.join(sorted(word.split("")))
            key = ''.join(sorted(list(word)))
            dd[key].append(word)
        
        answer = []
        # keys = dd.keys
        # keys = list(dd.keys)
        keys = dd.keys()

        for k in keys:
            answer.append(dd[k])

        return answer

3. 시간복잡도

O(n)O(n)

4. 결과

성공: 1회 (예제는 5회)

메모리:  17.2 MB, less than 86.50%

시간:   96 ms, faster than 83.76%

5. 소요 시간

시작: 21.09.23 11:04

끝: 21.05.11 12:13

📕 피드백

1. 검색한 내용

https://wikidocs.net/21119

만약 문자열을 한 글자씩 나눠 저장하고 싶다면 다음과 같이 간단히 list로 Casting하기만 하면 된다.

>>> a = ‘hello’

>>> list(a)

[‘h’, ‘e’, ‘l’, ‘l’, ‘o’]

2. 실수

1. split('')은 불가. (한 글자씩 자르기 불가)

a = 'hello'
print(a.split(""))
# ValueError: empty separator

한 글자씩 자르려면 list(str)을 해야 한다.

2. sort()는 그 자체를 정렬하고, sorted()는 정렬된 객체를 반환

-> 웬만하면 sorted를 사용하자.

3. 딕셔너리 keys()는 함수이다.

3. 발전 방향 (개선/추가사항)

1. sorted(word)를 하면 문자열도 정렬 가능

2. dictionay.values()를 하면 값만 반환 가능

0개의 댓글