-
해쉬_LeetCode_Group-Anagrams알고리즘/알고리즘 문제풀이 2021. 7. 26. 16:32
https://leetcode.com/problems/group-anagrams/submissions/
문제 접근
- 입력 strs을 아나그램 된 원소끼리 [String]으로 묶고, 이를 다시 [[String]]의 형태로 반환한다.
이 때, 아나그램된 원소들을 어떻게 분리 할 것인가? 에 대한 답으로 Dictionary<Set,[String]>을 택했다.
anagram된 strs중 한 원소를 철자단위로 분리해서 set에 넣어서 Key로 사용하려 했다.
이는 결론적으로 실패한 접근. 입력 strs: ["ddddg","dgggg"]를 구분 할 수 없었다. - 이를 극복하기 위해 각 원소를 sort하여 key로 사용한다.
실패 코드
더보기class Anagrams { func groupAnagrams(_ strs: [String]) -> [[String]] { var sol: [[String]] = [] var dict: Dictionary<Set<String.Element>,[String]> = [:] let tmp = strs.map({ $0.map({$0}) }) tmp.forEach({ element in let tmpSet = Set(element) if dict[tmpSet] == nil { dict[tmpSet] = [] } dict[tmpSet]?.append(element.reduce("", { String($0) + String($1) })) }) dict.forEach({ (key,value) in sol.append(value) }) return sol } }
개선 코드
더보기class Solution { func groupAnagrams(_ strs: [String]) -> [[String]] { var dict: Dictionary<String,[String]> = [:] strs.forEach({ str in let sorted = String(str.sorted()) dict[sorted, default: []].append(str) }) return Array(dict.values) } }
'알고리즘 > 알고리즘 문제풀이' 카테고리의 다른 글
DFS/BFS_LeetCode_keys-and-rooms (0) 2021.08.04 그리디_프로그래머스_큰 수 만들기 (0) 2021.08.02 완전탐색_프로그래머스_카펫 (0) 2021.07.22 DFS_LeetCode_Sum Root to Leaf Numbers (0) 2021.07.21 해쉬_LeetCode_RomanToInteger (0) 2021.07.20 - 입력 strs을 아나그램 된 원소끼리 [String]으로 묶고, 이를 다시 [[String]]의 형태로 반환한다.