시간 초과를 유의해야 하므로 HashMap을 이용해서 풀어야한다.
import java.util.*;
class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Map<String, List<String>> map = new HashMap<>();
for(String str : strs){
char [] charArray = str.toCharArray();
Arrays.sort(charArray);
String sortedStr = new String(charArray);
if(!map.containsKey(sortedStr)){
map.put(sortedStr, new ArrayList<>());
}
map.get(sortedStr).add(str);
}
return new ArrayList<>(map.values());
}
}
- 풀이한 코드가 짧아서 전체 소스코드에 첨부하여 설명한다.
String
, value: List<String>
인 map 변수 선언ex) eat -> aet , tae -> ate, bat -> abt
sortedStr
)이 map에 key로 존재하지 않은 경우, map에 해당 문자열을 key로 하여 새로 생성한다.조금만 생각하면 쉽게 풀 수 있는데 그 조금만 생각하는 게 어려웠다.
문자열을 charArray로 바꾸어 정렬하는 접근까지는 생각했지만, 시간초과에 걸려서 다른 사람의 코드를 참고 했다.
기존에 작성한 코드는 List<String>
타입을 가진 list와 part를 사용해 list에 str 문자열을 삽입한 후, 비교하면서 Anagram인 경우 list에서 제거, part에 삽입하는 식으로 접근했는데, 정답 코드보다 비효율적이고 공간을 낭비한다.
흥, 이제 Anagram 문제 나오면 무조건 map 쓸 거다.