[LeetCode_49] 그룹 애너그램

2022. 2. 6. 16:38· #️⃣ Project 및 개발일지/Algorithm 문제 풀이
목차
  1. # 문제 설명 

파이썬으로 배우는 알고리즘 책을 공부하며 풀었던 LeetCode문제들을 재정리해보자.

 

# 문제 설명 

49번 Group Anagrams은 문자열 배열을 받아 애너그램 단위로 그룹핑하는 문제이다.

 

* 애너그램 : 문자를 재배열하여 다른 뜻을 가진 단어로 바꾸는 것 

Example

 

 

# 풀이방법 1 - 정렬 후 딕셔너리에 저장

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
     
        output = []
        anagrams = {} # dictionay for check anagram's Index in 'output' list
        insertIdx = 0
        
        for _str in strs :   
            sortedStr = "".join(sorted(_str))
            
            if sortedStr in anagrams : 
                output[anagrams[sortedStr]].append(_str)
            else :
                anagrams[sortedStr] = insertIdx
                output.insert(insertIdx, [_str])
                insertIdx += 1
         
                
        return output

 

- anagrams 딕셔너리 : output 리스트를 관리하기 위한 딕셔너리로, 키는 애너그램 문자열을, 값은 해당 애너그램이 리스트의 몇 번째 인덱스에 있는 지 수정할 것  

- insertIdx 변수 : output 리스트에 넣을 때 마지막 인덱스를 알기 위해 둔 변수 

- output 리스트 : 애너그램을 저장하는 리스트  

1. 리스트의 한 단어를 정렬한 후 ouput 리스트에 넣기 위해 먼저 anagrams 딕셔너리를 확인하여, 이전에 해당 애너그램이 쓰였는지 확인한다.

2. 만약 없다면 딕셔너리에 해당 애너그램을 저장하는 리스트의 인덱스를 저장 후, 리스트에 애너그램을 저장한다.

있다면 딕셔너리에서 해당 애너그램이 저장된 리스트 인덱스를 찾아서 리스트에 저장한다. 

 

| 핵심 |

sortedStr = "".join(sorted(_str))

sorted만 사용하면 배열이라, 문자열로 바꾸기 위해서 "".join을 이용한다.

 

# 풀이 방법 2 - 정렬 후 딕셔너리에 저장 (책 풀이)

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
     
        anagrams = collections.defaultdict(list)
        
        for word in strs : 
        	anagrams[''.join(sorted(word))].append(word)
            
        return list(anagrams.values())

 

책의 방법은 리스트에 따로 저장 안 하고, 딕셔너리에 value을 뽑아 list로 바꾸면 됨 

 

| 핵심 |

anagrams = collections.defaultdict(list)

anagrams[''.join(sorted(word))].append(word)

 

 

 

# 결과 

'#️⃣ Project 및 개발일지 > Algorithm 문제 풀이' 카테고리의 다른 글

[LeetCode_238] 자신을 제외한 배열의 곱  (0) 2022.02.06
[LeetCode_5] 가장 긴 팰린드롬 부분 문자열  (0) 2022.02.06
[LeetCode_937] 로그파일 재정렬  (0) 2022.02.06
[LeetCode_344] 문자열 뒤집기  (0) 2022.02.06
[LeetCode_125] 유효한 팰린드롬  (0) 2022.02.06
  1. # 문제 설명 
'#️⃣ Project 및 개발일지/Algorithm 문제 풀이' 카테고리의 다른 글
  • [LeetCode_238] 자신을 제외한 배열의 곱
  • [LeetCode_5] 가장 긴 팰린드롬 부분 문자열
  • [LeetCode_937] 로그파일 재정렬
  • [LeetCode_344] 문자열 뒤집기
HyeM207
HyeM207
"Reflections and Growth Through Records" 회고와 기록을 통한 성장으로
HyeM207
HYEM's Storage
HyeM207
  • ALL (115)
    • #️⃣ CS (Computer Science) (5)
      • Database (2)
      • SQL (2)
      • Git (1)
    • #️⃣ Data Engineering (43)
      • Airflow (18)
      • Spark (8)
      • Snowflake (2)
      • BI,DashBoard (4)
      • ELK Stack (2)
      • Hadoop (5)
      • Kafka (4)
    • #️⃣ Cloud&Container (16)
      • AWS (8)
      • GCP (1)
      • Docker (6)
      • Kubernetes (1)
    • #️⃣ Project 및 개발일지 (37)
      • Mini Project (5)
      • 개발일지 (9)
      • Algorithm 문제 풀이 (20)
    • #️⃣ 책 리뷰 (4)
    • #️⃣ 회고글&프로젝트 후기 (10)

공지사항

인기 글

최근 댓글

블로그 메뉴

  • 홈
  • 태그
  • 방명록
hELLO · Designed By 정상우.v4.2.2
HyeM207
[LeetCode_49] 그룹 애너그램
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.