항해99 2주차 - 그룹애너그램

Jang Seok Woo·2022년 1월 23일
0

알고리즘

목록 보기
10/74

Today I learned
2022/01/17

회고록


1/17

항해 99, 알고리즘 1주차

교재 : 파이썬 알고리즘 인터뷰

6장 문자열 조작

1. 이론

문자열에 관한 이론

문자열(String)이란 문자, 단어 등으로 구성된 문자들의 집합을 의미한다. 예를 들어 다음과 같은 것들이 문자열이다.

"Life is too short, You need Python"
"a"
"123"

위 문자열 예문을 보면 모두 큰따옴표(" ")로 둘러싸여 있다. "123은 숫자인데 왜 문자열이지?"라는 의문이 드는 독자도 있을 것이다. 따옴표로 둘러싸여 있으면 모두 문자열이라고 보면 된다.

2. 문제

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

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"]]

cf) 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.

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

3. MySol

import collections


def groupAnagrams(strs):
    anagrams = collections.defaultdict(list) # 키값을 정해주는 배열이다.

    print('defaultdict : ' + str(anagrams.default_factory))

    for word in strs:

        print("origin : " + word + ", sorted : " + str(sorted(word)))
        print("''.join(sorted(word))'' : " + ''.join(sorted(word)))
        # list 벗기기 위해 .join 이용
        anagrams[''.join(sorted(word))].append(word)

    return anagrams.values()


if __name__ == '__main__':

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

    n = groupAnagrams(n)

    print(n)

4. 배운 점

  • collections.defaultdict를 이용하여 키 : 밸류1,밸류2.. 으로 새로운 배열을 만들어 낼 수 있다.

  • ''.join(["a","b","c"]) == 'abc'

  • sorted("eat") == ["a","e","t"] //문자열을 정렬시, char단위로 끊어진 배열로 나온다.

profile
https://github.com/jsw4215

0개의 댓글