6장_5 문자열 조작(그룹 애너그램)
문자열의 배열을 받아, anagrams를 그룹화하라.
Anagram은 일반적으로 모든 원본 문자를 정확히 한 번 사용하여 다른 단어 나 구의 문자를 재배열하여 형성 된 단어 또는 문구입니다.
예 1:
Input: strs = ["eat","tea","tan","ate","nat","bat"]
Output: [["bat"],["nat","tan"],["ate","eat","tea"]]
애너그램이란 일종의 언어유희이다. 주어진 단어를 재배열하여 다른 뜻을 가진 새로운 단어로 만드는 것을 말한다. 예를 들면 문전박대를 대박전문으로 바꿔부르는 것 말이다.
일단 코드를 살표보자.
import collections
from typing import List
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())
anagrams = collections.defaultdict(list)
우선 anagrams라는 딕셔널리를 설정한다.
for word in strs: #정렬하여 딕셔너리에 추가 anagrams[''.join(sorted(word))].append(word) return list(anagrams.values())
그리고 정렬한 값을 키로 하여 딕셔너리에 추가한다.
sorted(word)로 단어들을 순서만 다른 단어들을 구분하기 위해 알파벳순으로 정렬하여 append(word) 같은 단어지만 다른 순서를 가진 단어들을 묶는다.
- 만약 존재하지 않는 키를 삽입 할 수도 있으니 에러가 나지 않게 defultdict()로 선언하여 매번 키 존재 여부를 체크하지 안하고 비교 구문을 생략해 간결하게 구성할 수 있다.
return list(anagrams.values())
그리고 우리가 출력에 필요한건 키값이 아닌 키값과 매칭되는 것들을 출력하는 것이니 values()를 사용하여 반환받는다.
Author And Source
이 문제에 관하여(6장_5 문자열 조작(그룹 애너그램)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dongmin/6장5-문자열-조작그룹-애너그램저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)