[leetcode] 그룹 애너그램

김민서·2024년 1월 5일
0

알고리즘 문제풀이

목록 보기
10/47

링크텍스트
이게 왜 오래 걸리나 싶은데 오래 걸렸다..
파이썬 함수 활용이 미흡하다는 것을 느꼈다.

단어 리스트가 주어졌을 때, 같은 알파벳으로 이루어진 단어들을 묶어 반환해야 한다.

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

answer = {}
for str in strs:
	sorted_word = ''.join(sorted(str))
    answer[sorted_word] = answer.get(sorted_word, []) + [str]
  
print(answer)

문제를 푸는 방식은 맞았지만 이를 구현하는 데 있어서 오류가 많이 났다.

설명: strs에 들어있는 각각의 단어들을 순회하면서, 해당 단어의 순서를 오름차순으로 바꾼다. 딕셔너리(answer)에 이 오름차순으로 바꾼 단어(sorted_word)를 키 값으로 원래의 단어(오름차순으로 정렬하지 않은 단어(str))를 넣는다.

에러가 났던 부분:

answer[sorted_word] = [answer[sorted_word]].append(str)

이런 식으로 코드를 썼었는데 에러가 났다.

  1. answer안에 아예 sorted_word의 키 값이 없는 경우 이런식으로 접근이 불가능하다. 이 경우 get() 함수를 사용하면 해당 키 값이 없더라도 None을 반환하며 에러가 발생하지 않게 된다.
  2. 또한, 값이 없을 경우 타입이 NoneType이기 때문에 이에 리스트에서 사용할 수 있는 append() 함수를 사용할 수 없다. 따라서 + [] 이렇게 배열을 더해주는 방식으로 한다면 타입이 none이더라도 요소를 추가할 수 있다.
    *참고로 append() 함수가 두 배 이상 빠르다고 한다.

0개의 댓글