Leetcode: Anagram Groups (js 자바스크립트 neetcode150)
2024. 7. 16. 23:25ㆍb:develop/LeetCode
Practice
Arrays & Hashing
✅ 체크포인트
1. Map 객체를 사용할 수 있는가?
2. Map 객체 이외의 빈 객체 사용이 가능한가?
3. forEach, split, sort, join 의 사용법을 알고 있는가?
이 문제는 해시 맵(Hash Map) 자료구조를 활용하여 해결할 수 있습니다.
해시 맵은 키-값 쌍을 저장하고, 키를 사용하여 값을 빠르게 검색할 수 있는 자료구조입니다.
이 문제에서의 키는 각 문자열의 정렬된 형태이고, 값은 같은 정렬된 형태를 가지는 문자열들의 배열입니다.
자료구조
해시 맵 (Hash Map)
- 키-값 쌍을 저장하는 자료구조입니다. 이 문제에서는 객체({})를 해시 맵 사용
- 해시 맵을 사용하면 특정 키에 해당하는 값을 빠르게 삽입하고 검색할 수 있습니다.
알고리즘
해시맵을 사용한 그룹화 알고리즘
- 문자열 배열을 순회하면서, 각 문자열을 정렬된 형태로 변환하여 키로 사용하고, 해시 맵에 저장
- 같은 키를 가지는 문자열들은 같은 아나그램 그룹에 속하게 됩니다.
알고리즘 단계
- 초기화: 빈 해시 맵(객체)을 생성
- 순회 및 키 생성: 주어진 문자열 배열을 순회하며 각 문자열을 정렬된 형태로 변환하여 키 생성
- 해시 맵에 저장: 생성된 키를 해시 맵에 저장, 만약 키가 해시 맵에 없다면 새로운 배열을 생성하고 키가 이미 존재하면 해당 배열에 문자열 추가
- 결과 반환: 해시 맵의 값을 배열로 변환하여 반환
class Solution {
/**
* @param {string[]} strs
* @return {string[][]}
*/
groupAnagrams(strs) {
const map = {};
strs.forEach( str => {
const key = str.split('').sort().join('');
if(!map[key]) {
map[key] = [];
}
map[key].push(str);
});
return Object.values(map);
}
}