본문 바로가기
JAVA/Coding Test Study

[Leet Code] Group Anagrams : Java

by ♡˖GYURI˖♡ 2024. 3. 4.
728x90
 

Group Anagrams - LeetCode

Can you solve this real interview question? Group Anagrams - Given an array of strings strs, group the anagrams together. You can return the answer in any order. An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase

leetcode.com

 

 

 

이해하기

같은 문자들로 이루어진 것끼리 List를 이루도록 하여 이중 List로 반환하는 문제였다.

예를 들어 strs = {"eat", "tea", "tan", "ate", "nat", "bat"} 라면 {"eat", "tea", "ate"}는 a, e, t로 이루어져 있으므로 하나로 묶는다. 마찬가지로 {"tan", "nat"}을 하나의 리스트로 만들고, {"bat"}은 a, b, t로 이루어진 다른 문자열이 없으므로 홀로 리스트로 만들어진다.

 

  1. 각 문자열이 어떤 문자들로 구성되어 있는지 분석한다.
    • "eat"를 'e', 'a', 't' 로 쪼개야 한다.
    • char 배열로 만들자.
  2. char 배열을 sort한다.
    • 'e', 'a', 't' 도 'a', 'e', 't'
    • 't', 'e', 'a' 도 'a', 'e', 't'
    • 'a', 't', 'e' 도 'a', 'e', 't'
  3. sort한 배열을 key 로 만든다. key = "aet"
  4. map에 추가한다.
    • 만약 map.get(key) 가 null 이라면 List 새로 생성
    • 만약 map.get(key) 가 null 이 아니라면 있던 List를 받아와서 값 추가

 

 

문제풀이

import java.util.*;

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        List<List<String>> answer = new ArrayList<>();
        Map<String, Integer> map = new HashMap<>();
        int value = 0;

        for (int i = 0; i < strs.length; i++) {
            String key = "";
            char[] charArray = strs[i].toCharArray();
            Arrays.sort(charArray);
            key = new String(charArray);

            if (map.get(key) != null) {
                int n = map.get(key);
                List<String> target = answer.get(n);
                target.add(strs[i]);
                answer.set(n, target);
            } else {
                map.put(key, value++);
                List<String> target = new ArrayList<>();
                target.add(strs[i]);
                answer.add(target);
            }
        }

        return answer;
    }
}

 

 

 

 


 

 

leetcode 49. Group Anagrams 리트코드 49. 그룹 애너그램 문제 풀이

책에서 다룬 리트코드 문제들을 풀이한 포스팅이다. 문제는 모두 리트코드에 출제된 문제들이며, 직접 풀었지만, 책에서 주는 힌트와 풀이 과정들을 참고한 경우가 많다. 이곳은 정리한 책에 나

rollingsnowball.tistory.com