https://leetcode.com/problems/group-anagrams/
Group Anagrams - LeetCode
Can you solve this real interview question? Group Anagrams - Given an array of strings strs, group the anagrams together. You can return the answer in any order. An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase
leetcode.com
Group Anagrams - 아나그램 묶기
Given an array of strings strs, group the anagrams together. You can return the answer in any order.
An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.
문자열 strs가 주어졌을 때 아나그램들을 묶어라. 답은 어떤 순서로도 내도 상관 없다.
아나그램은 원래 문자열의 문자 순서를 바꿔서 만들 수 있는 단어를 뜻한다.
개요
Valid Anagram의 심화 문제며 난이도는 Medium이다. 이런 유형을 처음 봤다면 대체 어떻게 풀 수 있을까? 고민하게 되는 건 당연하다. 이 문제도 해쉬 맵을 이용 하여 풀 수 있다. 일단 Valid Anagram을 풀 수 없다면 이 문제는 풀 수가 없다.
첫째로 주어진 문자열들이 아나그램인지 확인을 먼저 한 후 해쉬맵을 이용하여 정답을 만들어야 한다.
2 가지의 풀이 방법
공통적으로 해쉬맵을 이용하면 쉽게 답을 풀 수 있다. 해쉬의 키 값을 어떻게 설정하냐에 따라 풀이가 달라진다.
1) 해쉬 키 설정 방법 첫 번째로는 26개의 알파벳이 존재하기 때문에 26 길이의 배열을 만든 후 현재 문자열의 문자의 charCode와 'a'의 charCode를 비교한다. 그 후에 그 값에 해당하는 배열의 인덱스를 1씩 올린 후 toString() 메서드를 사용하여 문자열로 바꾸면 000010100.... 같은 문자로 바뀌게 되는데 이것이 아나그램들의 키 값이 된다.
솔직히 키 값이 0100101010 이런 식이 어서.. 디버깅도 힘들고 선호하는 해쉬 방법은 아니지만 charCodeAt() 메서드의 활용은 이렇게 할 수 있다는 걸 깨우치는 건 앞으로 풀게 될 문제들을 상대로 유용하다.
2) 단순히 문자열을 쪼개서 정렬해서 키 값으로 이용하면 아나그램들은 같은 키 값으로 이용할 수 있게 된다.
간결하고 디버깅도 쉽다. 각 문자열들의 최대 길이는 100이기에 해쉬 메커니즘은 O(1)이라 생각해도 된다.
풀이
hash는 charCode와 배열을 이용한 첫 번째 방법, hash2는 두 번째 정렬 방법이다.
map을 사용하여 배열 안에 문자열들을 돌면서 키 값을 해쉬 하여 만들고, 그 키 값이 맵에 존재하지 않는다면 배열을 만든다.
그리고 그 안에 문자열들을 넣은 후 Object.values 메서드를 사용하여 map 오브젝트 안의 값들을 배열로 만들어 반환하면 완료
'Blind 75 > Array' 카테고리의 다른 글
Blind 75 | Product of Array Except Self (Array 6 / 8) (0) | 2023.06.06 |
---|---|
Blind 75 | Top K Frequent Elements (Array 5 / 8) (0) | 2023.06.05 |
Blind 75 | Valid Anagram (Array 3 / 8) (0) | 2023.06.04 |
Blind 75 | Contains Duplicate (Array 2 / 8) (0) | 2023.06.03 |
Blind 75 | Two Sum (Array 1 / 8) (0) | 2023.06.03 |