알고리즘

7. 애너그램 (Defaultdict, join 활용, 파이썬 내장 정렬함수,sorted,sort)

jwjwvison 2021. 8. 16. 21:48

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

 

Group Anagrams - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

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

 애너그램을 판단하는 가장 간단한 방법은 정렬하여 비교하는 것이다.

 여기서는 defaultdict 객체와 문자열 리스트에대한 join함수 활용법을 중심으로 포스팅해보겠다.

 

먼저 이문제를 풀기위한 정답 코드를 보면

def groupAnagrams(strs):
    di=collections.defaultdict(list)
    for word in strs:
        key=''.join(sorted(word))
        di[key].append(word)
    return di.values()

앞선 포스팅에서 말했듯이 일반 딕셔너리는 존재하지 않는 키를 삽입할 경우 KeyError가 발생하므로, 에러가 나지 않도록 위와 같이 항상 디폴트를 생성해주는 defaultdict()로 선언하며, 매번 키 존재 여부를 체크하지 않고 비교 구문을 생략해 간결하게 구성할 수 있다.

 

 join함수를 사용한 이유는 sorted(word)의 결과값은 다음과 같다.

a='adc'
print(sorted(a))

이러한 형태를 ''.join() 함수를 통해 ''로 원소 사이를 잇는다. 여기서는 따옴표 안에 아무것도 없기 때문에 그냥 원소들을 잇는 결과를 가져온다.

 

파이썬 내장 정렬 함수

 여기서는 정렬 알고리즘 자체보다는 파이썬 정렬 함수의 기능과 관련한 내용을 간단히 다루겠다. 파이썬에서는 팀소트라는 고성능 정렬 알고리즘을 사용한다. 이 방법은 세상의 대부분의 데이터는 어느정도 정렬되어있을 것이다 라는 생각에서 출발한 아이디어 이다. 기반은 병합정렬이다. 다음은 sorted() 함수를 이용한 파이썬 리스트를 정렬하는 예다.