Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
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
Archives
Today
Total
관리 메뉴

hwooo

LeetCode (C/C++, Java) 49. Group Anagrams 본문

Study/Algorithm

LeetCode (C/C++, Java) 49. Group Anagrams

hwooo 2024. 12. 29. 22:37

https://leetcode.com/problems/group-anagrams/

 


풀이

주어진 문자열을 알파벳 순으로 정렬한 후 이를 key로 가진 map을 하나 만든다.
문자열들을 순회하며 알파벳 순으로 정렬한 후, 해당 값과 같은 key가 있다면 해당 value에 값을 추가하고, 아니라면 map에 해당 쌍을 추가한다.


C/C++ 코드

class Solution {
public:
    vector<vector<string>> groupAnagrams(vector<string>& strs) {
        unordered_map<string, vector<string>> sorted;

        for (string& s : strs) {
            string tmp = s;
            sort(tmp.begin(), tmp.end());

            sorted[tmp].push_back(s);
        }

        vector<vector<string>> ans;
        for (auto iter = sorted.begin(); iter != sorted.end(); iter++) 
            ans.push_back(iter->second);
        
        return ans;
    }
};

 

Java 코드

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String, List<String>> map = new HashMap<>();

        for (String str : strs) {
            char[] arr = str.toCharArray();
            Arrays.sort(arr);
            String tmpStr = new String(arr);

            if (map.containsKey(tmpStr)) 
                map.get(tmpStr).add(str);

            else
                map.put(tmpStr, new ArrayList<>(Arrays.asList(str)));
        }

        return new ArrayList<>(map.values());
    }
}