문제
문제
다음과 같이 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문을 줄이는 방법을 찾아야 한다.