728x90
문제 설명
문자열 배열을 주고 문자열 구성요소가 같은 것들끼리 그룹을 지어서 배열로 반환해주면 되는 문제
문제 푸는데 필요한 요소들
- 문자열 서순을 바꿔줘야 할 거 같음
- 문자열 같은 거 끼리 배열에 넣어주기
위와 같이 생각을 하고 처음에 문제를 제출 했었던 코드
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
sort_strs = []
for str in strs:
if sorted(str) not in sort_strs:
sort_strs.append(sorted(str))
result = []
for i in sort_strs:
temp = []
for str in strs:
if i == sorted(str):
temp.append(str)
result.append(temp)
return result
처음에 제출 했을 때는 방향은 맞다고 생각을 했는데, 왠지 시간 초과가 날 거 같았었다. 제출하고 110번 정도 테스트 케이스에서 바로 오류가 나서 다시 문제를 읽어보면서 생각해봤을 때는 set이나 dict을 써서 하는 게 좋을 거 같다는 생각을 할 수 있었다.
다시 생각했을 때 필요한 것들
- dict 로 만들어서 넣어주기
- 넣어줄 때 key값을 정렬해서 넣어주면 뱉어줄 때 key 반영해서 끼리끼리 그룹으로 내보내주기 편할거 같다.
이렇게 생각을 해서 코드를 짜는 데 python으로 dict를 쓰는 걸 찾아보니 collections.defaultdict로 작성해서 쓰는 쪽이 많이 나와서 그렇게 코드를 참고해서 써봤다. 평소에는 항상 일일이 만들어서 사용했던 거 같은데 코테 볼 때 유용하게 사용한다고 블로그 글에 다들 많이 적어두셔서 이번에 공부하는 동안은 계속 써보는 걸로 결정했다.
따로 collections 같이 코딩 테스트에서 쓸 수 있는 표준 라이브러리를 사용하는 것도 공부를 해야 될 것 같다.
class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
# temp = {}
temp = collections.defaultdict(list)
for word in strs:
temp[''.join(sorted(word))].append(word)
return list(temp.values())
반환 해주는 것도 dict 안에 key값이 같은 것들로 모여있어서 리스트로 씌워주기만 하면 편하게 받을 수 있었던 것 같다.
728x90
'DEV > 알고리즘 문제 풀이' 카테고리의 다른 글
[자료구조/알고리즘] - 문자열 (0) | 2023.05.10 |
---|---|
[자료구조/알고리즘] - 배열/array (0) | 2023.05.08 |
LEETCODE(리트코드) 125번 Valid Palindrome (유효한 팬린드롬) (0) | 2022.11.25 |
알고리즘 다시 공부하기 3일차 (0) | 2022.09.12 |