본문 바로가기
Algorithm/Python

[LeetCode] Group Anagrams

by _sweep 2022. 1. 25.

문제 링크 >> https://leetcode.com/problems/group-anagrams/

 

 

📋 문제

Given an array of strings strs, group the anagrams together. You can return the answer in any order.

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.

 

 

👉 출력

Example 1:

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

 

Example 2:

Input: strs = [""]
Output: [[""]]

 

Example 3:

Input: strs = ["a"]
Output: [["a"]]

 

 

💡 사용된 개념

✔️ join()

이터러블의 모든 요소들을 구분자를 통해 하나의 문자열로 만든다.

 

string.join(iterable)
  • string : separator. iterable 요소들을 붙일 때 사용하는 구분자.
  • iterable : 요소들을 붙일 iterable 객체

 

 

📝 풀이

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        answer = []
        hashmap = {}
  
        for i in strs:
            temp = "".join(sorted(i))
            temp_arr = []
            
            if temp in hashmap:
            	# 아나그램이 존재함
                hashmap[temp].append(i)
            else:
                temp_arr.append(i)
                hashmap[temp] = temp_arr
  
        for v in hashmap.values():
            answer.append(v)
            
        return answer

 

문제에서 original letter들을 한번씩만 사용한다고 했으니 모든 문자열에는 중복되는 문자가 존재하지 않는다.

따라서 문자열의 각 문자들을 쪼개 오름차순으로 정렬한 후 다시 하나의 문자열로 만들어 temp에 저장했다.

 

그리고 이 temp를 hashmap에 저장하는데 hashmap에 temp라는 key가 없으면 key에 temp, value에 원본 문자열을 저장했다.

만약 temp가 이미 hashmap의 key로 존재한다는 것은 해당 문자열의 아나그램이 이미 hashmap에 저장된 것이다.

따라서 이때는 hashmap[temp]에 현재 원본 문자열을 추가한다.

 

이 과정을 거치고 나면 hashmap에는 같은 문자 구성을 가지고 있는 아나그램들이 문자 구성별로 구분되어 value에 저장된다.

따라서 hashmap의 value들을 answer에 저장, 리턴시켜 주었다.

 

 

+++

문제가 영어라서 그런지 문제를 안 읽고 그냥 예제만 보고 풀려고 하다가 자꾸 뻘짓하게 된다.

이번에도 original letter들을 한번씩만 사용한다는 것을 나중에 봤다.

그래서 여러 문자들이 존재하는 경우의 수까지 다 하다가 멘탈 터지는 줄 알았다.

꼭 문제 먼저 읽기 제발 좀!

 

 

 

🔍 참조

join() https://www.w3schools.com/python/ref_string_join.asp

 

 

 

 

 

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

[백준1541번] 잃어버린 괄호  (0) 2022.01.28
[백준11656번] 접미사 배열  (0) 2022.01.27
[LeetCode] Two Sum  (0) 2022.01.25
[프로그래머스] 베스트 앨범  (0) 2022.01.25
[프로그래머스] 위장  (0) 2022.01.24

댓글