본문 바로가기

PYTHON

[python3 | 알고리즘] 15. 문자열 조작(그룹 애너그램)

728x90
반응형
[조건]

문자열 배열을 받아 애너그램 단위로 그룹핑하기

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


[입력]

["eat", "tea", "tan", "ate", "nat", "bat"]


[출력]

[
    ["ate", "eat", "tea"],
    ["nat", "tan"].
    ["bat"]
]

 

 

1. 정렬, 딕셔너리 사용

 

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

def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
    #딕셔너리 정의
    anagrams = collections.defaultdict(list)
 
    for word in strs:
        #정렬해서 딕셔너리에 추가
        anagrams[''.join(sorted(word))].append(word)
    
    return anagrams.values()

 

[정렬]

 

 - sort() ==> 리스트 자체를 정렬 가능(제자리 정렬), 정렬 결과를 리턴하지 않는다. 리턴 값은 None

 - sorted() ==> 리스트 요소 정렬 가능(문자, 숫자), 정렬 결과를 리턴한다.

 - sorted(리스트 변수, key=len) ==> 길이 순서로 정렬

 - sorted(리스트 변수, key=사용자 정의 함수) ==> 함수를 이용해 정렬

a = ['cde', 'cfc', 'abc']

def myFn(s):
    # 기준1 : 문자열의 첫번째, 기준2 : 문자열의 마지막
    return s[0], s[-1]

print(sorted(a, key=myFn))

# 람다 표현식으로
sorted(a, key=lambda s: (s[0], s[-1]))

>>> ['abc', 'cfc', 'cde']


** 그냥 sorted() 했다면 : ['abc', 'cde', 'cfc'] 

 

 

[리스트 -> 문자열]

 

 - join() ==> 리스트를 문자열로 결합

 

 

728x90
반응형