Problem From.
https://leetcode.com/problems/group-anagrams/
오늘 문제는 주어진 String 배열에서 애너그램들을 한 리스트로 묶어서 반환하는 문제였다.
애너그램은 강아지, 지강아, 아강지 처럼 글자순서만 바꾼 동일한 낱말을 의미한다.
두개의 단어가 주어졌을 때 애너그램을 구분하는 부분이 고민됐었는데,
String 을 char 배열로 바꾸고 sort 하였을때 그 값이 같으면 같은 낱말이라고 판단할 수 있었다.
그러한 판명법을 가지고, Map 에 key 값에 정렬된 String 을 넣고 Value 값에 리스트를 담아서, 주어진 리스트를 한번만 순회하면서 답을 구할 수 있도록 만들었다.
class Solution {
fun groupAnagrams(strs: Array<String>): List<List<String>> {
val map = HashMap<String, ArrayList<String>>()
for(str in strs) {
val sort = str.toCharArray().sorted().toString()
if(!map.containsKey(sort)){
map.put(sort, arrayListOf<String>(str))
}else {
map.get(sort)!!.add(str)
}
}
val temp = arrayListOf<ArrayList<String>>()
map.forEach{ entry ->
temp.add(entry.value)
}
return temp.toList()
}
}
오늘 문제는 Map 을 적절하게 활용하여 실행시간을 줄이는것이 관건이 문제였다.