티스토리 뷰
https://leetcode.com/problems/group-anagrams/description/
1. 문제분석
문자열 0~100자 1~10,000개 strs[] -> 아나그램을 그룹핑 (순서무관)
-> 아나그램은, 순서 무관하게 동일한 문자로 이루어진 문자열
2. 풀어보기
[eat,tea,tan,ate,nat,bat] -> [[bat],[tan,nat],[eat,tea,ate]]
3. 슈도코드
string_by_anagram{} 맵을 만들어서
-> strs[] 돌려서 -> 각 str 알파벳을 정렬해서 -> 그걸 키로, str을 값으로 담고
-> 이거를 values만 추출해서 -> 배열로 묶어서 리턴
4. 구현코드
const groupAnagrams = (strs: string[]): string[][] => {
const string_by_anagram = new Map<string, string[]>();
for (let str of strs) {
const key = str.split('').sort().join('');
const list = string_by_anagram.get(key) ?? [];
list.push(str);
string_by_anagram.set(key, list);
}
return Array.from(string_by_anagram.values());
};
5. 풀이회고
간단한 문제였지만, JS 로직의 한계상 문자열을 직접 정렬시킬 수 없어서 아쉽다.
계수정렬로 O(N) 만에 key를 생성하는 코드가 있긴 하던데.. 가벼운 로직이고 하니 가독성 좋은 현재 코드 유지한다.
'자료구조 & 알고리즘 > LeetCode' 카테고리의 다른 글
feat: [Easy] Valid Palindrome (JS/TS) (0) | 2024.07.10 |
---|---|
feat: [Easy] Merge Two Sorted Lists (JS/TS) (0) | 2024.06.28 |
feat: [Easy] Reverse Linked List (JS/TS) (0) | 2024.06.28 |
feat: [Easy] Valid Parentheses (JS/TS) (0) | 2024.06.28 |
feat: [Easy] Diameter of Binary Tree (JS/TS) (0) | 2024.06.26 |