TIL81. CodeKata : 같은 알파벳으로 이루어진 단어끼리 묶기 문제
🌈 같은 알파벳으로 이루어진 단어끼리 묶기 문제
🤔 나의 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가 존재하면 배열을 합치는 방법이다.
Author And Source
이 문제에 관하여(TIL81. CodeKata : 같은 알파벳으로 이루어진 단어끼리 묶기 문제), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jewon119/TIL81.-CodeKata-같은-알파벳으로-이루어진-단어끼리-묶기-문제저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)