본문 바로가기
JavaScript/Leetcode

Group Anagrams (Medium)

by lacuca9 2024. 9. 28.

문제

Given an array of strings strs, group the anagramsntogether. 
You can return the answer in any order.

Example 1:
Input: strs = ["eat","tea","tan","ate","nat","bat"]
Output: [["bat"],["nat","tan"],["ate","eat","tea"]]

Explanation:
There is no string in strs that can be rearranged to form "bat".
The strings "nat" and "tan" are anagrams as they can be rearranged to form each other.
The strings "ate", "eat", and "tea" are anagrams as they can be rearranged to form each other.

Example 2:
Input: strs = [""]
Output: [[""]]

Example 3:
Input: strs = ["a"]
Output: [["a"]]

Constraints:
1 <= strs.length <= 104
0 <= strs[i].length <= 100
strs[i] consists of lowercase English letters.


풀이

비교하기 쉽게 각 문자열을 뜯어서 알파벳순으로 정렬하여 sortedArr에 담는다

for (i = 0; i < strs.length; i++) {
        sortedArr[i] = strs[i].split('').sort().join('');
    }

 

그 이후에 문자끼리 비교해서 같으면 묶어서 처음 입력받은 문자를 result 배열에 넣는게 목표인데,

방식을 몰라서 여기서 부턴 답을 참고했다.

 

 

해결책 :

hash map 이용하기


 

답안

/**
 * @param {string[]} strs
 * @return {string[][]}
 */

var groupAnagrams = function (strs) {
    var sortedArr = []      
    var result = []
    var map = new Map();    // 정렬된 문자열을 기준으로 그룹을 저장할 맵


    for (i = 0; i < strs.length; i++) {
        sortedArr[i] = strs[i].split('').sort().join('');
    }
    // 정렬된 문자열을 기준으로 그룹을 생성하여 result에 저장
    for (i = 0; i < strs.length; i++) {
        let key = sortedArr[i]; // 정렬된 문자열을 key로 사용

        if (!map.has(key)) {
            map.set(key, []);   // key가 없으면 새 배열 생성
        }
        map.get(key).push(strs[i]); // 원래 문자열을 그룹에 추가
    }
    // 맵에 저장된 값들을 result 배열에 저장
    result = Array.from(map.values());
    return result;
};

'JavaScript > Leetcode' 카테고리의 다른 글

132 Pattern (Medium)  (0) 2024.10.23
Trapping Rain Water (Hard)  (5) 2024.10.23
Container With Most Water (Medium)  (0) 2024.09.27
Longest Palindromic Substring (Medium)  (1) 2024.09.26
3Sum (Medium)  (0) 2024.09.26