์ฝ๋
import java.util.*;
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> ans = new HashMap<>();
// toCharArray() -> ๋ฌธ์์ด ๋ฌธ์ ๋ฐฐ์ด๋ก ๋ณํ
// ['ABC'] -> ['A', 'B', 'C']
for (String str : strs) {
char[] chars = str.toCharArray();
Arrays.sort(chars);
// ๋ฌธ์์ด๋ก ์ฌ๋ณํํ์ฌ key๋ก ํ์ฉ
String sorted = new String(chars);
// ans์ ์์ผ๋ฉด key๊ฐ๊ณผ ํจ๊ป ๋น ๋ฆฌ์คํธ ์ฝ์
if (!ans.containsKey(sorted)) {
ans.put(sorted, new ArrayList<>());
}
// key๊ฐ ๊ฐ์ ธ์์ ๋ฌธ์์ด์ ์ถ๊ฐ
ans.get(sorted).add(str);
}
return new ArrayList<>(ans.values());
}
}
Java
๋ณต์ฌ
toCharArray()๊ฐ ๋๋ฌด ์ ์ด์ธ๋ฆฌ๋ ๋ฌธ์ ์๋ ๊ฒ ๊ฐ๋ค.
๋ค๋ฅธ ํ์ด (from ์๊ตฌ๋ ์ฝ๋)
import java.util.*;
public class Ch06_05 {
public List<List<String>> groupAnagrams(String[] strs) {
Map<Integer, List<String>> map = new HashMap<>();
for (String s : strs) {
int[] counts = new int[26];
for (int i = 0; i < s.length(); i++) counts[s.charAt(i) - 'a']++;
int hash = Arrays.hashCode(counts);
map.putIfAbsent(hash, new ArrayList<>());
map.get(hash).add(s);
}
List<List<String>> result = new ArrayList<>();
for (int key : map.keySet()) {
result.add(map.get(key));
}
return result;
}
}
Java
๋ณต์ฌ
int ๋ฐฐ์ด ์ ์ธํด์ ์์คํค๊ฐ์ผ๋ก count๋๋ฆฌ๋๊ฑฐ๋ hash๊ฐ์ผ๋ก ๋งคํํ๋๊ฒ ์ ๊ทผ๋ฐฉ์์ด ๋๋ฌด ์ข์๋ค๊ณ ์๊ฐํ๋ค. Integer๋ก ์ ์ธํ์๊ธธ๋ ์ฅ ํ๋๋ฐ ํ์ด๊ฐ ์์ฒญ ์ ๊ธฐํ๋ค.
if(!containsKey)์ put์ ๋์ค๋ก ์ฌ์ฉํ๋ ๋ถ๋ถ์ด putIfAbsent() ํ๋๋ก ์ค์ฌ์ง๋ ๊ฒ๋ ์๊ฒ๋์๋ค.
๋ฌธ์ ํด๊ฒฐ ์์ด๋์ด
toCharArray()๋ก ๋ฌธ์์ด์ ๋ฌธ์ ๋ฐฐ์ด๋ก ๋ถ๋ฆฌํ ํ, ์ ๋ ฌํด๋ฒ๋ฆฌ๋ฉด ์ ๋๊ทธ๋จ์ ์ฝ๊ฒ ์ฐพ์๋ผ ์ ์๋ค. ์ด๋ฅผ HashMap์ ํ์ฉํด์ ๊ทธ๋ฃนํํด์ฃผ๋ฉด ๋.