Daily LeetCode Challenge - 49. Group Anagrams

Min Young Kim·2022년 10월 28일
0

algorithm

목록 보기
18/198

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 을 적절하게 활용하여 실행시간을 줄이는것이 관건이 문제였다.

profile
길을 찾는 개발자

0개의 댓글