TIL81. CodeKata : 같은 알파벳으로 이루어진 단어끼리 묶기 문제

6158 단어 codekatacodekata

🌈 같은 알파벳으로 이루어진 단어끼리 묶기 문제


🤔 나의 Solution

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

✔️ strs는 배열이다. str로 ["eat", "tea", "tan", "ate", "nat", "bat"]이 주어진다면, 아래와 같이 반환한다.

[
  ["ate","eat","tea"],
  ["nat","tan"],
  ["bat"]
]
def groupAnagrams(strs):
  d = {}
  for str in sorted(strs):
    key = tuple(sorted(str))
    if key not in d:
      d[key] = [str]
    else: d[key].append(str)
  return list(d.values())
print(groupAnagrams(["eat", "tea", "tan", "ate", "nat", "bat"]))

✔️ 같은 단어인지 찾기 위해서 배열 내 원소를 정렬한 뒤, tuple로 변환했다.

✔️ 이 변환된 값을 key로해서, 이미 이런 key가 없다면 리스트에 담아 value를 추가하고, 이미 존재한다면, append해서 뒤에 붙여 주었다.

✔️ 이를 문제에서 요구한 결과와 같이 반환하기 위해, values 함수로 값만 추출한다.

✔️ 이러면 dict_values([['ate', 'eat', 'tea'], ['bat'], ['nat', 'tan']]) 이런식으로 반환하기 때문에 list로 다시 변환하여 출력하면 답이된다.


🤔 다른 해결 방법

def groupAnagrams(strs):
    d = {}
    for w in sorted(strs):
        key = tuple(sorted(w))
        d[key] = d.get(key, []) + [w]
    return list(d.values())
print(groupAnagrams(["eat", "tea", "tan", "ate", "nat", "bat"]))

✔️ 내가 해결한 문제와 거의 같지만, if~else문을 작성하지 않고 더 간결하게 표현할 수 있는 방법이다.

✔️ 딕셔너리에서 get을해와서 존재하지 않는다면, 빈 리스트이기 떄문에 현재 단어를 추가하고, 이미 해당 key가 존재하면 배열을 합치는 방법이다.

좋은 웹페이지 즐겨찾기