[CodeKata] 15. groupAnagrams

그냥·2022년 6월 29일
0

CodeKata

목록 보기
15/18

문제

문제
다음과 같이 input이 주어졌을 때, 같은 알파벳으로 이루어진 단어끼리 묶어주세요.

Input: ["eat", "tea", "tan", "ate", "nat", "bat"],
Output:
[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]
output에서 순서는 상관없습니다.


풀이


1. 문제의 조건 정리
1) 문자열로 이루어진 배열을 인자로 받음
2) 문자열로 이루어진 이중 리스트를 반환 (ex. [['a', 'b'], ['c','d']])
3) 아나그램이 같은 단어를 같은 리스트에 삽입

2. 조건에 대한 코드 구현 방법 생각
1) 문자를 key로 하고, 문자를 sorted() 한 문자를 value로 한 dict를 만든다.
2) value의 갯수를 구한다. value의 갯수만큼 리스트가 있어야 하기 때문이다.
3) value의 갯수만큼 for문을 돌려서 value와 같으면 lst를 선언하여 dict의 key를 append 한다.

3. 구현 코드
def groupAnagrams(strs):
  dict = {}
  s = set()
  result = []
  
  for i in range(len(strs)):
    dict[strs[i]] = "".join(sorted(strs[i]))

  for key in dict:
    s.add(dict[key])

  s_list = list(s)

  for str in s_list:
    lst = []
    for key in dict:
      if str == dict[key]:
        lst.append(key)
    result.append(lst)

  return result      

4. 코드 리뷰
1) 불필요한 변수를 선언을 많이 한 것 같다. 변수 선언을 줄일 수 있는 방법을 찾아야 한다.
2) for문이 너무 많다. for문을 줄이는 방법을 찾아야 한다.

0개의 댓글