[LeetCode-자바] N_49 Group Anagrams

0woy·2024년 5월 11일
0

코딩테스트

목록 보기
15/42

📜 문제

  • 변수명이 str인 문자열 배열이 주어진다.
  • 문자열 배열 중 Anagram으로 표현 가능한 문자열 list를 출력한다.

시간 초과를 유의해야 하므로 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());
    }
}

- 풀이한 코드가 짧아서 전체 소스코드에 첨부하여 설명한다.

  • key: String, value: List<String> 인 map 변수 선언
  • str 배열의 모든 문자열을 순회 하면서 해당 문자열을 사전순으로 정렬한다.

    ex) eat -> aet , tae -> ate, bat -> abt

  • 정렬된 문자열(sortedStr)이 map에 key로 존재하지 않은 경우, map에 해당 문자열을 key로 하여 새로 생성한다.
  • key로 존재하는 경우, 해당 문자열의 value에 현재 문자열을 삽입한다.

✨ 결과

조금만 생각하면 쉽게 풀 수 있는데 그 조금만 생각하는 게 어려웠다.
문자열을 charArray로 바꾸어 정렬하는 접근까지는 생각했지만, 시간초과에 걸려서 다른 사람의 코드를 참고 했다.

기존에 작성한 코드는 List<String> 타입을 가진 list와 part를 사용해 list에 str 문자열을 삽입한 후, 비교하면서 Anagram인 경우 list에서 제거, part에 삽입하는 식으로 접근했는데, 정답 코드보다 비효율적이고 공간을 낭비한다.

흥, 이제 Anagram 문제 나오면 무조건 map 쓸 거다.

0개의 댓글