그룹 애너그램 과제톡 자료

tk_jang·2022년 5월 13일
0

알고리즘

목록 보기
1/7

그룹 애너그램

1.애너그램이란

일종의 언어유희로 문자열을 재배열 시켜 다른뜻을 가진 단어로 바꾸는것이다.

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

입력

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

출력

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

3.풀이

1.먼저 같은 애너그램을 가진그룹 끼리 묶어야 하기때문에 딕셔너리 형식을 써서 같은 키값으로 묶어 줘야한다.

딕셔너리란 
	딕셔너리는 키(key)와 값(value)이 한 쌍이 하나의 대응 관계를 가지고 있는 자료형입니다.
    

저는 일단 알고리즘을 처음 접해봐서 처음에는풀지 못했습니다 .ㅠㅠ
그래서 생각해도 답이 나오지 않아서 풀이를 보고 문제를 이해하기를 먼저했습니다.

정답풀이코드:

def groupAnagrams2(strs):
    anagrams = collections.defaultdict(list) 
    for word in strs:
        anagrams["".join(sorted(word))].append(word)
        anagrams["".join(sorted(word))].sort()
    return list(sorted(anagrams.values(),key=len))

먼저 풀이코드를 보면

collections 라는 모듈을 사용해 내부 함수인 defaultdict() 를 사용해서
유사 딕셔너리 를 생성해줍니다.

defaultdict() 함수는 딕셔너리와 작동방식이 동일 하지만
딕셔너리에 인자값이 존재하지 않을때 기본값을 자동으로 초기값으로 지정해주기 때문에
사용함에 더 편리하게 사용할 수 있다고 생각합니다.

위에 코드 같은 경우는 collections.defaultdict(list) 라는 함수를 알지 못하면 풀지 못하는 방식이므로
저는 만약 저라면 어떻게 풀수 있을까 생각을 하고 다른 방식으로 풀어봤습니다.

내가 직접 풀이한 코드:

def groupAnagrams(strs):
    result = {} 
    for word in strs: 
        test = "".join(sorted(word))         
        if test not in result: 
            result[test] =list() 
            result[test].append(word) 
        else: 
            result[test].append(word) 
        result[test].sort()
    return list(sorted(result.values(),key=len))

먼저 딕셔너리 형식을 생성해준 뒤

for문을 사용해서 문자열 배열 strs을 하나씩 word 안에 대입.

대입된 문자열을 오름차순으로 정렬을 해서 test 에 다시 대입 해줍니다.

만약에 오름차순으로 정렬된 test문자열이 result딕셔너리 안에 없다면

딕셔너리 안에 test의 키값을 추가해주고 list형식으로 초기화 해줍니다.

초기화된 키값에 word라는 value 를 추가해 줍니다.

만약에 오름차순으로 정렬된 test문자열이 resilt딕셔너리 안에 있다면

키값에 word라는 value 를 추가해 줍니다.

딕셔너리를 리스트화 해주고 리스트의 길이 순서로 정렬을 해주고 값을 리턴해줍니다.

느낀점

처음에는 모르더라도 풀이를 보면서 하나하나 하다 보면 될것 같다는 자신감이 생겼다 시간이 오래 걸리더라도 분명히 내것으로 만들수 있다는 마음으로 앞으로 알고리즘 공부를 진행해야할 것 같다.

0개의 댓글