티스토리 뷰

반응형

문제 링크

 

Group Anagrams - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제

Given an array of strings, group anagrams together.

Example:

Input: ["eat", "tea", "tan", "ate", "nat", "bat"],

Output: [ ["ate","eat","tea"], ["nat","tan"], ["bat"] ]

Note:

  • All inputs will be in lowercase.
  • The order of your output does not matter.

문제 풀이

String을 구성하는 Character들이 같은 문자들은 같다고 판단하고 이를 모아 배열로 반환하면 되는 문제이다.

이러한 배열을 저장할 HashMap을 만들어 문자 구성이 같은 문자열을 모아두면 된다.

하지만 만약 eat과 eatt를 비교할 때엔 구성하는 문자는 같지만 문자 개수가 다르기 때문에 다른 것으로 분류되어야 한다.

때문에 각각의 문자열을 배열로 바꾼 뒤 정렬을 하여 같은 구성으로 된 문자열인지 확인하면 될 것 같다.

나의 소스 코드

class Solution{
    func groupAnagrams(_ strs: [String]) -> [[String]]{

        var dict = [Array<String> : Array<String>]()

        for str in strs{
            let temp = str.map{ String($0) }.sorted()
            if dict.keys.contains(temp){
                dict[temp]?.append(str)
            } else {
                dict[temp] = [str]
            }
        }

        return Array(dict.values)
    }
}

다른 사람의 소스 코드

class Solution {
    func groupAnagrams(_ strs: [String]) -> [[String]] {
        guard strs.count != 0 else { return [] }

        // bond sorted key with its group
        var dict = [String:[String]]()

        for str in strs {
            let sorted = String(str.sorted())
            dict[sorted, default:[]].append(str)
        }
        return Array(dict.values)
    }
}

배운 점

문자열에도 sorted() 메서드가 존재한다는 것과 문자열을 정렬하는 것이 배열을 정렬하는 것보다 빠르다는 것도 알았다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함