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, typically using all the original letters exactly once.

Example 1 : Input : strs = ["eat","tea","tan","ate","nat","bat"] Output : [["bat"],["nat","tan"],["ate","eat","tea"]]

Example 2 : Input : strs = [""] Output : [[""]]

Example 3 : Input : strs = ["a"] Output : [["a"]]

์•Œ๊ณ ๋ฆฌ์ฆ˜ 1. ์ž๋ฃŒ๊ตฌ์กฐ ๋งŒ๋“ ๋‹ค. - Ma๊ณผ ์ •๋‹ตList<List<String>> 2. Input String์„ char[ ] ๋ฐฐ์—ด๋กœ ๋ฐ”๊พผ๋‹ค. - String.toCharArray() ์ด์šฉ ์ด๋ฅผ ์•ŒํŒŒ๋ฒณ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค. - Arrays.sort()์ด์šฉ.(์•ŒํŒŒ๋ฒณ์ˆœ์œผ๋กœ ์ •๋ ฌ) 3. 2๋ฅผ ๋‹ค์‹œ String์œผ๋กœ ๋ฐ”๊พธ๊ณ , ์ด๊ฒƒ์€ map์˜ key๊ฐ€ ๋œ๋‹ค! - String.valueOf()์ด์šฉ 4. Map์— ๋„ฃ๋Š”๋‹ค! Map(key,value) = Map(String, List<String>). key๋Š” ์ผ์ข…์˜ index, value๋Š” ์ผ์ข…์˜ ๋ฐ์ดํ„ฐ๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ํŽธํ•จ! 5. ์ •๋‹ต์ด ๋˜๋Š” List<List<String>>๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.map์˜ ๋ชจ๋“  value๋ฅผ ๋‹ด๋Š”๋‹ค. - .addAll(map.values()) ์ด์šฉ

์•Œ๊ณ ๋ฆฌ์ฆ˜์„ Java๋กœ

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        //0.๊ธฐ์ €์‚ฌ๋ก€ ์ œ์™ธ
        if (strs == null || strs.length == 0) return new ArrayList<List<String>>();
        //1.๊ทธ๋ฆ‡ ์ƒ์„ฑ
        List<List<String>> result = new ArrayList<>();
        Map<String,List<String>> map = new HashMap<String,List<String>>();
        
        for(String str : strs) {
            //2-1.String์„ char[]๋กœ ๋ฐ”๊พผ๋‹ค.
            //2-2.Arrays.sort()๋ฅผ ์ด์šฉํ•˜์—ฌ 2-1์„ ์ •๋ ฌํ•œ๋‹ค!
            char[] charArray = str.toCharArray();
            Arrays.sort(charArray);

            //3.์ •๋ ฌํ•œ char ๋ฐฐ์—ด์˜ ๊ฐ’์€ String์ด ๋˜๊ณ , ์ด๊ฒƒ์€ map์˜ key๊ฐ€ ๋œ๋‹ค.
            //3-1. char[]๋ฅผ ๋‹ค์‹œ String์œผ๋กœ ๋ฐ”๊พผ๋‹ค.
            //3-2. 3-1์„ map์˜ key๋กœ ๋งŒ๋“ ๋‹ค(์ €์žฅํ•œ๋‹ค).
            String key = String.valueOf(charArray);
        
            //4.Map(key,value) = Map(String,List<String>)
            if(map.containsKey(key)) {//key๊ฐ’์œผ๋กœ aet๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด!
                map.get(key).add(str);
            }else {//์ฒ˜์Œ์—” else๋ฌธ ์‹คํ–‰!
                List<String> list = new ArrayList<>();
                list.add(str);
                map.put(key,list);
            }
        }
        result.addAll(map.values());
        return result;
    }
}

๋ฐฐ์šด ๋‚ด์šฉ ์ •๋ฆฌ 1. String.toCharArray() : String์„ char[ ] ๋ฐฐ์—ด๋กœ ๋ฐ”๊พผ๋‹ค.(๋นˆ์ถœ,์ค‘์š”!) 2. String.valueOf(parameter) : ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›์€ ๊ฒƒ์„ String์œผ๋กœ ๋ฐ”๊พผ. 3. Map.values() : Map์˜ ๋ชจ๋“  values๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค. 4. ArrayList.addAll() : ArrayList์˜ add() ๋ฉ”์„œ๋“œ์™€ addAll() ๋ฉ”์„œ๋“œ๋Š” ArrayList์— ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›์€ ๊ฒƒ์„ ๋ฐ์ดํ„ฐ๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค. addAll()์€ ArrayList๋ฅผ ํ†ต์งธ๋กœ ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์šฉ๋œ๋‹ค.

result.addAll(map.values());
//map.values()๋ฅผ ํ†ตํ•ด map์˜ ๋ชจ๋“  value๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ ,
//์ด ๋•Œ map์˜ value๋Š” String ํƒ€์ž…์˜ List์ด๊ณ , ์ด List๋Š” ArrayList๋ฅผ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง!

Last updated

Was this helpful?