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
반응형
'PYTHON' 카테고리의 다른 글
[백준 10818 | python3 | 1차원 배열] 1. 최소, 최대 (0) | 2021.05.10 |
---|---|
[python3] spring SQL log 파라미터 치환해서 추출하기. (0) | 2021.04.13 |
[python3 | 알고리즘] 14. 문자열 조작(가장 흔한 단어) (0) | 2021.03.09 |
[python3 | 알고리즘] 13. 문자열 조작(로그파일 재정렬) (0) | 2021.03.09 |
[python3 | 알고리즘] 12. 문자열 조작(문자열 뒤집기) (0) | 2021.03.09 |