알고리즘 11일차

Panther·2021년 7월 26일
1

문제 출처: https://leetcode.com/problems/group-anagrams/submissions/

테스트는 통과하나 타임 리밋 초과가 발생합니다. 더 나은 방법을 찾아야 합니다.

func groupAnagrams(_ strs: [String]) -> [[String]] {
        
    var set = Set<String>()
        
    for i in strs {
        set.insert(String(i.sorted()))
    }
        
    var dimensionArray = [[String]]()
        
    for i in set {
        dimensionArray.append([i])
    }
        
    for i in 0..<dimensionArray.count {
        var filter = [String]()
        filter = strs.filter { [String($0.sorted())] == dimensionArray[i] }
        dimensionArray[i].append(contentsOf: filter)
        dimensionArray[i].removeFirst()
    }
        
    return dimensionArray
    
}

다른 풀이이지만 기본 아이디어는 같고, 역시 타임 리밋 초과입니다.

func groupAnagrams(_ strs: [String]) -> [[String]] {
        
    var result = Set<[String]>()
        
    for i in strs {
        var sorted = String(i.sorted())
        var filter = [String]()
        filter = strs.filter { String($0.sorted()) == sorted }
        result.insert(filter)
    }
        
    var results = [[String]]()
        
    for i in result {
        results.append(i)
    }
        
    return results
        
}

딕셔너리를 사용한 풀이이지만, 여전히 타임 리밋 초과입니다.

func groupAnagrams(_ strs: [String]) -> [[String]] {
        
    var dict = [String:[String]]()
        
    for i in strs {
        let sorted = String(i.sorted())
        var filter = [String]()
        filter = strs.filter { String($0.sorted()) == sorted }
        dict[sorted] = filter
    }
    
    return Array(dict.values)
        
}

0개의 댓글