Leetcode: Anagram Groups (js ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ neetcode150)

2024. 7. 16. 23:25ใ†๐Ÿ“‚ DevNote

 

Practice

Arrays & Hashing 

 

โœ… ์ฒดํฌํฌ์ธํŠธ

1. Map ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?
2. Map ๊ฐ์ฒด ์ด์™ธ์˜ ๋นˆ ๊ฐ์ฒด ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ๊ฐ€?
3. forEach, split, sort, join ์˜ ์‚ฌ์šฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋Š”๊ฐ€?


์ด ๋ฌธ์ œ๋Š” ํ•ด์‹œ ๋งต(Hash Map) ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•ด์‹œ ๋งต์€ ํ‚ค-๊ฐ’ ์Œ์„ ์ €์žฅํ•˜๊ณ , ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.
์ด ๋ฌธ์ œ์—์„œ์˜ ํ‚ค๋Š” ๊ฐ ๋ฌธ์ž์—ด์˜ ์ •๋ ฌ๋œ ํ˜•ํƒœ์ด๊ณ , ๊ฐ’์€ ๊ฐ™์€ ์ •๋ ฌ๋œ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง€๋Š” ๋ฌธ์ž์—ด๋“ค์˜ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ

ํ•ด์‹œ ๋งต (Hash Map)
- ํ‚ค-๊ฐ’ ์Œ์„ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ์—์„œ๋Š” ๊ฐ์ฒด({})๋ฅผ ํ•ด์‹œ ๋งต ์‚ฌ์šฉ
- ํ•ด์‹œ ๋งต์„ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ • ํ‚ค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์‚ฝ์ž…ํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜

ํ•ด์‹œ๋งต์„ ์‚ฌ์šฉํ•œ ๊ทธ๋ฃนํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜
- ๋ฌธ์ž์—ด ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉด์„œ, ๊ฐ ๋ฌธ์ž์—ด์„ ์ •๋ ฌ๋œ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ‚ค๋กœ ์‚ฌ์šฉํ•˜๊ณ , ํ•ด์‹œ ๋งต์— ์ €์žฅ
- ๊ฐ™์€ ํ‚ค๋ฅผ ๊ฐ€์ง€๋Š” ๋ฌธ์ž์—ด๋“ค์€ ๊ฐ™์€ ์•„๋‚˜๊ทธ๋žจ ๊ทธ๋ฃน์— ์†ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋‹จ๊ณ„

  1. ์ดˆ๊ธฐํ™”: ๋นˆ ํ•ด์‹œ ๋งต(๊ฐ์ฒด)์„ ์ƒ์„ฑ
  2. ์ˆœํšŒ ๋ฐ ํ‚ค ์ƒ์„ฑ: ์ฃผ์–ด์ง„ ๋ฌธ์ž์—ด ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ๋ฌธ์ž์—ด์„ ์ •๋ ฌ๋œ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ํ‚ค ์ƒ์„ฑ
  3. ํ•ด์‹œ ๋งต์— ์ €์žฅ: ์ƒ์„ฑ๋œ ํ‚ค๋ฅผ ํ•ด์‹œ ๋งต์— ์ €์žฅ, ๋งŒ์•ฝ ํ‚ค๊ฐ€ ํ•ด์‹œ ๋งต์— ์—†๋‹ค๋ฉด ์ƒˆ๋กœ์šด ๋ฐฐ์—ด์„ ์ƒ์„ฑํ•˜๊ณ  ํ‚ค๊ฐ€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ํ•ด๋‹น ๋ฐฐ์—ด์— ๋ฌธ์ž์—ด ์ถ”๊ฐ€
  4. ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜: ํ•ด์‹œ ๋งต์˜ ๊ฐ’์„ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฐ˜ํ™˜

class Solution {
    /**
     * @param {string[]} strs
     * @return {string[][]}
     */
    groupAnagrams(strs) {
        const map = {};

        strs.forEach( str => {
            const key = str.split('').sort().join('');

            if(!map[key]) {
                map[key] = [];
            }
            map[key].push(str);
        });
        return Object.values(map);
    }
}